Skip to content

How WCP Works

WCP Engine AppStore SQLite ConnectorHub MCP processes SyncEngine reads source via MCP writes targets via MCP stores SyncLinks in DB ConflictResolver auto (last-write / source-wins) · manual queue FastAPI REST API WebSocket /ws · live events React Dashboard

Represents an MCP server process. Stores the command, args, and env needed to start it.

{
"name": "notion",
"command": "npx",
"args": ["-y", "mcp-notion-server"],
"env": {"NOTION_TOKEN": "secret_xxx"}
}

A classified MCP tool — WCP knows whether it reads, writes, or lists.

{
"app": "notion",
"mcp_tool_name": "query_database",
"capability_id": "read_database",
"direction": "read"
}

A directed edge: source capability → target capability.

{
"wcp_id": "notion:page_123",
"source_app": "notion",
"source_capability": "read_page",
"target_app": "sheets",
"target_capability": "write_row"
}

An immutable record of each sync operation (success or error).

  1. SyncEngine.run() loads all active SyncLinks from the store
  2. For each link, ConnectorHub spawns (or reuses) the source MCP process
  3. Calls the source MCP tool via JSON-RPC to fetch data
  4. ConnectorHub spawns (or reuses) the target MCP process
  5. Calls the target MCP tool with the transformed payload
  6. ConflictResolver checks for hash-based conflicts
  7. SyncLog is written to SQLite
  8. WebSocket event is broadcast to all connected dashboard clients