Documentation
IntegrationsFabric MCP Gateway

Fabric MCP Gateway

Use Fabric as a unified MCP server from Claude Desktop, Cursor, VS Code, and any MCP-compatible client. Access all your projects, documents, workspaces, workflows, and connected tools through a single endpoint.

The Fabric MCP Gateway turns your entire Fabric instance into a single MCP server. Instead of configuring each tool separately in every AI client, you connect once to Fabric and get access to everything — your projects, documents, workspaces, workflows, and all your connected MCP servers — through one URL.

Why Use the Gateway?

Without GatewayWith Gateway
Configure each MCP server separately in each clientOne URL in your client config
Manage API keys per tool per clientFabric manages all credentials centrally
OAuth flows broken in most clientsFabric handles OAuth + token refresh
No visibility across project artifactsFull access to projects, docs, workspaces
Credentials scattered in config filesCredentials encrypted in Fabric, never leave the server
No usage controlsTime-limited, human-approved runtime authority

Quick Setup

1. Create an API Key

Go to Settings → API Keys and create a new key. Copy the key — it starts with fab_.

For organization context, create the key from your organization settings page.

2. Configure Your Client

Edit your claude_desktop_config.json:

{
  "mcpServers": {
    "fabric": {
      "url": "https://your-fabric.com/api/mcp-gateway",
      "headers": {
        "Authorization": "Bearer fab_xxxx_xxxxxxxxxx"
      }
    }
  }
}

Go to Settings → MCP Servers → Add Server:

  • Name: Fabric
  • URL: https://your-fabric.com/api/mcp-gateway
  • Headers: Authorization: Bearer fab_xxxx_xxxxxxxxxx

Add to your MCP configuration:

{
  "servers": {
    "fabric": {
      "url": "https://your-fabric.com/api/mcp-gateway",
      "headers": {
        "Authorization": "Bearer fab_xxxx_xxxxxxxxxx"
      }
    }
  }
}

Any MCP-compatible client can connect using the Streamable HTTP transport:

Endpoint: POST https://your-fabric.com/api/mcp-gateway
Auth:     Authorization: Bearer fab_xxxx_xxxxxxxxxx
Protocol: MCP 2025-03-26 (Streamable HTTP)

Health check: GET /api/mcp-gateway returns server info (no auth needed).

3. Organization Context (Optional)

To scope all tools to a specific organization, add the X-Organization-Id header:

{
  "headers": {
    "Authorization": "Bearer fab_xxxx_xxxxxxxxxx",
    "X-Organization-Id": "your-org-id"
  }
}

Or use fabric_switch_organization after connecting to switch context dynamically.

Coding Instructions

A project's Coding Instructions tab publishes one version of its skills, agents, rules, and setup files, and serves them to a connected client over the tools below. Rather than building the configuration above by hand, open that tab and click Connect your agent: it mints a read-only key (the mcp:read scope, which covers every read-only platform tool, these three included) and shows the same configuration block.

Project readers can propose adding, editing, or deleting a file from the Coding Instructions tab. Proposals pass the same validation and secret scanning as uploads before an instruction editor can review their changes and approve publication. Rejecting a proposal leaves the published files unchanged. If the published version changes before approval, submit the proposal again against the current version. You can cancel your own proposals once validation is no longer running. Each project allows up to 25 active proposals, with a limit of five per proposer. Large file bodies may be omitted from the review preview; editors can open a paged view of the full text. Canceled uploads can continue to count toward the limit until their upload links expire and cleanup finishes. Projects whose instructions come from a repository must make changes in that repository.

Only published versions are available through MCP and local sync. A pending proposal doesn't change the files your connected agents receive.

A connected agent finds them on its own. Every project fabric_get_project and fabric_list_projects return carries a codingInstructions field — { "published": false } when there is nothing to load, and the snapshot's version, fileCount, digest and publishedAt when there is. The connection handshake tells the agent what to do with it: call fabric_get_project_instruction_bundle to install the whole approved tree in one step, or fabric_list_project_instructions and fabric_get_project_instruction to read individual files, and follow them while working on that project. The field is omitted entirely for a key that does not hold the instructions:read scope (or a coarse mcp:read/mcp:write).

Keeping an installed copy current does not always mean downloading it again. Pass the digest you last installed as sinceDigest to either fabric_get_project_instruction_bundle or fabric_list_project_instructions:

  • the digest still matches — you get "unchanged": true and nothing else: no file list, no manifest, and no zip URL, so nothing is built or transferred. This is the only case that short-circuits;
  • it has moved on — you get the response you would have got anyway, in full, plus changes (the added, removed and changed paths) and since, the snapshot that digest names. sinceDigest tells you what changed; it does not send you a smaller download;
  • Fabric has never published that digest for this project, or has since pruned it — you get "changes": null alongside the same full response, which means treat it as a fresh install.

The Connect dialog also offers a starter sentence to paste into your tool. It is optional now that the project response advertises the instructions, and useful mainly to point an agent at one specific project:

Use the Fabric MCP server to load the published coding instructions for the project
"Your Project" and follow them while you help me work on it.

Bootstrap a Project

A new project's Context tab is often empty, which leaves Fabric's AI features little to work from. A connected coding agent can fill it from the repository you already have open: it sets the project's description, then pushes your README and key docs as knowledge sources. The connection handshake tells the agent to offer this when a project's fabric_list_project_contexts comes back with few or no sources.

The flow uses two tools. fabric_update_project sets the description, and fabric_upsert_project_context pushes one file per call, keyed by the file's path in the repository:

{ "name": "fabric_update_project",
  "arguments": { "projectId": "proj_example", "description": "Billing service: invoicing, payment retries and dunning." } }

{ "name": "fabric_upsert_project_context",
  "arguments": { "projectId": "proj_example", "sourcePath": "README.md", "content": "# Billing service\n..." } }

{ "name": "fabric_upsert_project_context",
  "arguments": { "projectId": "proj_example", "sourcePath": "docs/architecture.md", "content": "# Architecture\n..." } }

Pushed files appear in the project's Context tab under Living Memory, grouped by the folder of their path.

Pushing the same path again with the same content answers unchanged and writes nothing, and content identical to a source already in the project — another pushed file, or a file, link or note added in the Context tab — answers duplicate. To replace a file that is already there, the agent passes the contentHash it read from fabric_get_project_context or fabric_list_project_contexts as expectedContentHash; if someone else has changed the file since, the push answers conflict with the current hash and who changed it, and nothing is overwritten. If the file was deleted since, the push answers conflict with current set to null; call again without expectedContentHash to recreate it, which answers duplicate instead if that content already exists elsewhere in the project. When a file was renamed or moved without changing, push it at its new path with the old path as movedFromSourcePath and the old path's contentHash as expectedContentHash: the stored source is renamed in place and answers moved, keeping its history, instead of leaving a second copy behind.

Coding-instruction files — CLAUDE.md, AGENTS.md, anything under .claude/, and skills, agents, hooks, rules and scripts — do not go through this flow. The agent proposes those with fabric_propose_project_instruction_change, which opens a proposal on the Coding Instructions tab for a person to review. The agent should also leave out secrets, .env files and generated output.

Pushing context needs a key with the projects:write or mcp:write scope — the read-only key that Connect your agent mints cannot do it — and, as with every key, your own permission to add context sources to that project. If those docs already sit together in one folder, the Fabric CLI can push the whole folder instead: fabric context push <dir> --project <id> sends each text file by its path with the same unchanged, duplicate and conflict answers, and remembers what it sent so that later runs send only what changed. It needs the same projects:write scope. To start the agent flow, paste a sentence like this into your agent:

Use the Fabric MCP server to bootstrap the context for the project "Your Project" from this
repository: set its description and push the README and key docs, and tell me what you pushed.

What Tools Are Available?

When your client connects, it receives two categories of tools:

Platform Tools (Always Available)

These give the AI direct access to your Fabric data — no extra setup needed:

ToolDescription
fabric_get_identitySee your user context, active organization, and available orgs
fabric_list_organizationsList all organizations you belong to
fabric_switch_organizationSwitch between personal and org context
fabric_list_projectsList your projects with filtering and search, each with its published codingInstructions
fabric_get_projectGet full project details, including its published codingInstructions
fabric_create_projectCreate a new project
fabric_update_projectUpdate project name or description
fabric_list_documentsList documents in a project (PRDs, specs, etc.)
fabric_get_documentGet full document content in markdown
fabric_list_project_contextsList a project's Context tab sources — uploads, meeting transcripts, crawled links, notes
fabric_get_project_contextRead one context source in full: transcript text, extracted file text, or crawled markdown
fabric_upsert_project_contextPush a text file into a project's Context by its relative path: unchanged content is skipped, changed content replaces the stored version and is re-indexed, and replacing a file requires the contentHash you last read so nobody's edit is silently overwritten
fabric_list_project_instructionsBrowse or search a project's published coding-instruction files, or ask what changed since a sinceDigest
fabric_get_project_instructionRead one published coding-instruction file by path, paged for large files
fabric_get_project_instruction_bundleInstall the whole published tree as one zip, and report what changed since a sinceDigest
fabric_list_workspacesList your knowledge base workspaces
fabric_get_workspaceGet workspace details and document list
fabric_query_workspaceSemantic search (RAG) across workspace documents
fabric_list_workflowsList your automation workflows
fabric_get_workflowGet workflow details including nodes and edges
fabric_execute_workflowTrigger a published workflow
fabric_get_workflow_executionCheck workflow execution status
fabric_list_chatsList recent AI conversations
fabric_list_connected_serversSee all your connected MCP servers

Connected Server Tools (Require Authority)

Every MCP server you've connected in Settings → MCP Servers becomes available, namespaced by server name:

linear__list_issues       → List issues from your Linear connection
linear__create_issue      → Create an issue in Linear
github__list_repos        → List repos from your GitHub connection
slack__send_message       → Send a message via your Slack connection
notion__search            → Search your Notion workspace
fizzy__get_cards          → Get cards from Fizzy boards

Connected server tools require runtime authority before use. See Runtime Authority for details.

Per-User Tool Visibility

Each user only sees tools from MCP servers they personally connected in their current context:

  • User A connected Fizzy only → sees fizzy__* tools
  • User B connected Linear + Fizzy → sees linear__* + fizzy__* tools
  • In org context → sees tools from servers connected within that organization
  • Personal connections never appear in org context, and vice versa

Runtime Authority

Connected server tools are protected by runtime authority — a Pipes-style session-scoped authorization model. This means:

  1. Credentials are persistent — your MCP server connections stay configured
  2. Runtime access is ephemeral — AI agents must request temporary permission before using tools
  3. Approval is human-only — agents can request authority, but only humans can approve it

The Authority Flow

Loading diagram...

Authority Tools

ToolDescription
fabric_request_authorityRequest access to providers (e.g., linear, github) with READ or WRITE level and TTL
fabric_check_authorityCheck which providers are currently authorized
fabric_revoke_authorityEnd all active authority immediately

Authority Metadata in tools/list

Connected tools include metadata indicating their authority status:

{
  "name": "linear__list_issues",
  "description": "[Linear] List issues",
  "_meta": {
    "requiresAuthority": true,
    "authorityStatus": "granted",
    "providerKey": "linear"
  }
}

For more details, see Runtime Authority.

Example Conversations

Cross-Platform Project Sync

"Show me the features in the Acme project, then create a Linear issue for each one that doesn't have a corresponding ticket"

The AI will:

  1. fabric_list_projects → find Acme
  2. fabric_list_documents → get feature docs
  3. fabric_request_authority for Linear (WRITE)
  4. Wait for your approval in Fabric UI
  5. linear__list_issues → compare with features
  6. linear__create_issue → create missing tickets

Research From Project Context

"Read the last two design meetings on the Acme project and tell me what we decided about rate limiting"

The AI will:

  1. fabric_list_projects → find Acme
  2. fabric_list_project_contexts with type: "MEETING_TRANSCRIPT" → list the synced transcripts
  3. fabric_get_project_context on the two most recent → read the transcript text
  4. Answer from the transcripts, paging with nextOffset if a transcript is long

This is the same material the Context tab's Download All export covers. Two things to know before you rely on it:

  • Repository code-index entries (CODE_FILE, CODE_FILE_SUMMARY) are hidden from an unfiltered listing — an indexed repo produces thousands. Pass includeCodeContexts: true or filter by that type to see them.
  • A context that pins a monitored Teams or Slack conversation carries no transcript of its own: those messages are analysed into backlog proposals rather than stored on the context. Such rows come back with contentAvailable: false and an unavailableReason saying so, rather than an empty body.

"Search the engineering workspace for our database migration strategy and summarize the key decisions"

The AI will:

  1. fabric_list_workspaces → find engineering workspace
  2. fabric_query_workspace → semantic search for "database migration strategy"
  3. Return a summary based on the matching document chunks

Workflow Execution

"Run the weekly report workflow and send the output to #team-updates on Slack"

The AI will:

  1. fabric_list_workflows → find weekly report
  2. fabric_execute_workflow → trigger it
  3. fabric_get_workflow_execution → wait for completion
  4. fabric_request_authority for Slack (WRITE)
  5. slack__send_message → post the results

Protocol Details

The gateway implements the MCP 2025-03-26 Streamable HTTP transport:

MethodEndpointPurpose
POST/api/mcp-gatewayJSON-RPC requests (initialize, tools/list, tools/call)
GET/api/mcp-gatewayServer info (health check)
DELETE/api/mcp-gatewayTerminate session

Session Management

  • Sessions are created automatically on first request
  • Session ID is returned in the Mcp-Session-Id response header
  • Sessions last 24 hours
  • Active authority sessions are completed when the gateway session ends

Authentication

MethodHeaderUse Case
API KeyAuthorization: Bearer fab_xxxExternal clients (recommended)
Session CookieAutomaticBrowser-based clients

Next Steps