§ /integrations — claude code · codex · copilot · kiro

Any MCP client,
one memory.

Point every agent at the same Borg. No per-client SDKs, no per-client memories — the graph is shared by the database, not by passing bytes around.

transport · MCP · streamable HTTPport · 8080/mcpclients · 4 verified · 1 soon
§ 01 — OVERVIEW

One Postgres.
Every client.

Borg runs as a single borg-engine behind your enterprise endpoint. Claude Code, Codex CLI, Copilot, and Kiro authenticate to the same MCP service and read from the same namespace-scoped graph.

No SDKs, no lock-in

The client surface is seven MCP tools covering compilation, ingestion, recall, full episode fetch, soft deletion, action guarding, and deterministic project summaries.

Share memory across tools

Claude Code writes. Codex reads. Copilot queries. One Postgres. No synchronization daemon, no cross-SDK pipeline — just a shared namespace on a shared engine.

§ 02 — ENTERPRISE DEPLOYMENT

One managed endpoint.
Every client connected.

We provision PostgreSQL, configure Azure OpenAI and Entra OAuth, map namespace access to Entra groups, and hand your team a single HTTPS MCP endpoint.

Your deployment contract

https://YOUR_BORG_HOST/mcp is the shared MCP URL. OAuth-capable clients discover Entra authorization metadata and complete PKCE sign-in automatically. REST clients send an Entra bearer token to /api/*.

Need a deployment? Contact us ↗

§ 03 — CLIENT SETUP

Four verified clients,
one config pattern.

Codex connects natively. Clients that need a local command usemcp-remote@0.1.28 as the OAuth bridge, with a unique callback port and auth directory per client.

Claude Codeverified
// .mcp.json at project root
{
  "mcpServers": {
    "borg": {
      "command": "npx",
      "args": ["-y", "mcp-remote@0.1.28", "https://YOUR_BORG_HOST/mcp", "35535"],
      "env": {"MCP_REMOTE_CONFIG_DIR": "~/.borg-mcp/claude"}
    }
  }
}
The first connection opens the Entra sign-in flow. Project instructions live in CLAUDE.md.
Codex CLIverified
# ~/.codex/config.toml
[mcp_servers.borg]
url = "https://YOUR_BORG_HOST/mcp"

# authenticate once
codex mcp login borg --scopes access_as_user
Codex stores the OAuth session after the one-time Entra login. Project instructions live in AGENTS.md.
Kiro CLIverified
// ~/.kiro/settings/mcp.json
{
  "mcpServers": {
    "borg": {
      "command": "npx",
      "args": ["-y", "mcp-remote@0.1.28", "https://YOUR_BORG_HOST/mcp", "35536"],
      "env": {"MCP_REMOTE_CONFIG_DIR": "~/.borg-mcp/kiro"},
      "autoApprove": ["borg_think", "borg_learn", "borg_recall", "borg_get_episode", "borg_guard", "borg_project_summary"]
    }
  }
}
Kiro supports global and local MCP settings, per-agent mcpServers, plus steering files and richer hooks. borg_forget is intentionally not auto-approved.
GitHub Copilotverified
// .vscode/mcp.json
{
  "servers": {
    "borg": {
      "command": "npx",
      "args": ["-y", "mcp-remote@0.1.28", "https://YOUR_BORG_HOST/mcp", "35537"],
      "env": {"MCP_REMOTE_CONFIG_DIR": "~/.borg-mcp/copilot"}
    }
  }
}
Copilot reads MCP config from .vscode/mcp.json. Project instructions live in copilot-instructions.md.
§ 04 — INSTRUCTIONS & STEERING

Tell each client
when to consult memory.

Memory is only useful if the agent calls for it. The hook + instruction matrix below keeps behavior consistent across tools.

ToolGlobal instructionsProject instructionsHooks
Claude Code~/.claude/CLAUDE.mdCLAUDE.mdPostSession
Codex CLI~/.codex/AGENTS.mdAGENTS.mdnone native
Kiro CLI~/.kiro/steering/AGENTS.mdAGENTS.md · .kiro/steering/*.mdstop · postToolUse · agentSpawn
GitHub Copilotn/acopilot-instructions.mdnone native
§ 05 — REST FALLBACK

Not an MCP client?
Same tools over REST.

Core operations are available over authenticated REST for webhooks, CI, administrative tools, and legacy applications.

Ingest an episode

POST /api/learn
Authorization: Bearer <Entra access token>
content-type: application/json

{
  "namespace": "product-engineering",
  "content": "We moved Customer Portal off Semantic Kernel to Azure AI Foundry on Mar 10.",
  "source": "slack:#eng-arch",
  "occurred_at": "2026-03-10T15:04:00Z"
}

Compile context

POST /api/think
Authorization: Bearer <Entra access token>
content-type: application/json

{
  "namespace": "product-engineering",
  "query": "why did we move off Semantic Kernel?",
  "model": "claude",
  "task_hint": "architecture"
}