VantagePeers Docs

Architecture

Core concepts, database schema, and MCP protocol integration in VantagePeers.

Architecture

VantagePeers is a Convex-backed MCP server. Convex provides the database, serverless functions, vector indexes, and scheduling. The MCP layer exposes all capabilities as tools that Claude Code agents call natively.

System Overview

┌─────────────────────────────────────────────────────────┐
│                     Your Agent Team                      │
│                                                          │
│  Agent A (Machine 1)     Agent B (Machine 2)            │
│  Claude Code + MCP       Claude Code + MCP              │
└──────────────┬───────────────────┬──────────────────────┘
               │  MCP Protocol     │
               ▼                   ▼
┌─────────────────────────────────────────────────────────┐
│              VantagePeers MCP Server                     │
│         (Node.js process, runs locally per agent)        │
│                                                          │
│  82 tools across 14 categories                           │
└──────────────────────────┬──────────────────────────────┘
                           │  Convex SDK

┌─────────────────────────────────────────────────────────┐
│              Convex Cloud Backend                        │
│                                                          │
│  20 database tables    Vector indexes (memories)        │
│  Serverless functions  OpenAI embeddings pipeline       │
│  Cron scheduler        Real-time subscriptions          │
└─────────────────────────────────────────────────────────┘

Each agent runs its own local MCP server process. All agents share the same Convex deployment — that is how cross-machine coordination works. The Convex deployment is your single source of truth.

Core Concepts

Orchestrators

An orchestrator is a named role in your agent team. Examples: alice, bob, carol. An orchestrator represents what the agent does — its responsibility in the system. Orchestrator names are used as identities for memory namespaces, message routing, task assignment, and agent profiles.

When you store a memory with createdBy: "alice", it is attributed to the alice orchestrator. When you send a message from: "alice" to channel: "bob", the bob orchestrator receives it.

Instances

An instance is a specific running copy of an orchestrator. If you run the tau orchestrator on two machines — a laptop and a server — they are two instances: tau-laptop and tau-server.

Instances matter for message routing. You can send a message to all instances of an orchestrator (by role) or to a specific instance (by instance ID). This lets you target a specific machine when you need to.

Namespaces

Namespaces scope memories and prevent cross-contamination between projects. A namespace is a string path like global, project/vantage-starter, or orchestrator/tau.

Use global for knowledge that applies everywhere. Use project/your-project for project-specific context. Use orchestrator/name for agent-specific state.

When calling recall, queries only search within the specified namespace by default. You can query across namespaces by omitting the namespace filter.

Database Schema

VantagePeers uses 20 Convex tables. Each table has a defined schema with typed validators and indexes for efficient querying.

memories

The core memory store. Each document contains:

FieldTypeDescription
namespacestringScoping path (e.g., global, project/foo)
typestringuser, feedback, project, reference, or episode
contentstringThe memory text content
createdBystringOrchestrator that created the memory
embeddingfloat64[]Vector embedding (OpenAI text-embedding-3-small)
archivedbooleanWhether superseded by a newer memory
relatedTostring[]IDs of related memories

Vector index on embedding enables semantic similarity search.

messages

Persistent message store for cross-agent communication:

FieldTypeDescription
fromstringSender orchestrator ID
channelstringTarget channel or role
contentstringMessage text
instanceIdstring?Optional specific instance target
createdAtnumberUnix timestamp

messageReceipts

Per-recipient read tracking:

FieldTypeDescription
messageIdstringReference to message
recipientstringRecipient orchestrator ID
recipientInstanceIdstring?Specific instance, if targeted
readAtnumber?Timestamp when read, null if unread

tasks

Task coordination table:

FieldTypeDescription
titlestringTask title
assignedTostringOrchestrator responsible
statusstringtodo, in_progress, review, blocked, done
prioritystringlow, medium, high, urgent
missionIdstring?Parent mission, if grouped
dependsOnstring[]Task IDs that must complete first
blockedBystring?Blocker description (set when status is blocked)
completionNotestring?What was done, set on completion
dueDatenumber?Unix timestamp deadline

missions

Groups of related tasks with lifecycle tracking:

FieldTypeDescription
titlestringMission name
statusstringbrainstorm, plan, execute, validate, complete
pilotstringLead orchestrator
targetDatenumber?Target completion timestamp

recurringTasks

Cron-based task templates:

FieldTypeDescription
titlestringTask title template
cronExpressionstringStandard cron expression
assignedTostringDefault assignee
lastTriggerednumber?Last creation timestamp

profiles

Static identity and dynamic state per orchestrator instance:

FieldTypeDescription
orchestratorIdstringRole name
instanceIdstringInstance identifier
namestringDisplay name
staticobjectImmutable identity fields
static.rolestringWhat this agent does
static.workspacestringWorking directory path
static.capabilitiesstring[]What this agent can do
dynamicobjectMutable runtime state
dynamic.currentTaskstring?Active task description
dynamic.lastSeennumberTimestamp of last activity
dynamic.sessionCountnumberTotal sessions started

diary

Daily session logs:

FieldTypeDescription
datestringISO date string (e.g., 2026-03-29)
orchestratorstringAuthor
contentstringDiary narrative
highlightsstring[]Key events of the day

briefingNotes

Structured meeting and decision records:

FieldTypeDescription
titlestringBriefing subject
participantsstring[]Orchestrators present
decisionsstring[]Decisions made
linkedMemoriesstring[]Related memory IDs

components

Agent capability registry:

FieldTypeDescription
namestringComponent name
typestringagent, skill, hook, plugin
contentstringFull content backup
versionstring?Version identifier

MCP Protocol Integration

VantagePeers exposes all capabilities as MCP tools. The MCP server runs as a local Node.js process that the Claude Code client connects to via stdio. Every tool call goes through:

  1. Claude Code sends a tool call JSON to the MCP server via stdio
  2. The MCP server validates inputs and calls the appropriate Convex function via HTTP
  3. Convex executes the function against the database (with vector search if applicable)
  4. The result is returned to Claude Code as the tool response

All 82 tools are stateless from the MCP server's perspective — state lives in Convex. This means you can restart the MCP server process at any time without losing data.

On this page