Skip to main content
Glama
autobelay

Project-scoped MCP

by autobelay

Claude Project-scoped MCP

Install once. Open a project in Claude Code. Use the MCP servers declared by that project.

This local plugin reads the nearest mcp.json when its bridge starts and exposes that project's tools through one MCP connection. It uses Claude Code's documented plugin and project directory variables. There is no launch wrapper, configuration synchronization, scheduled job, or system-wide watcher.

Install

Requires Node.js 22 or newer, Git, and Claude Code with plugin marketplace support. Claude Code 2.1.309 is the version exercised locally; older versions have not been tested here. See tested behavior for live installation results.

claude plugin marketplace add autobelay/claude-project-scoped-mcp
claude plugin install project-scoped-mcp@autobelay-claude-project-mcp --scope user

Start a new local session in a project containing mcp.json:

cd /path/to/project
claude

Ask: “Use project_mcp_status to report which project MCP servers are connected.” The underlying tools are individually available; Claude does not have to call a generic dispatcher.

The plugin launches its bundled JavaScript bridge directly with Node. It does not download an executable at runtime or run an install script. A project's own servers may need additional runtimes, credentials, or network access. The install has no machine-specific project path.

Update and remove

claude plugin marketplace update autobelay-claude-project-mcp
claude plugin update project-scoped-mcp@autobelay-claude-project-mcp

Start a new session to use an updated bridge. To remove the plugin and marketplace:

claude plugin uninstall project-scoped-mcp@autobelay-claude-project-mcp
claude plugin marketplace remove autobelay-claude-project-mcp

Related MCP server: claude-octopus

Why project-scoped tools?

An MCP connection has context: which checkout, credentials, assets, and product conventions it should use. That context often belongs to a repository. A global server list gives every project irrelevant tools, and identically named servers can refer to different applications. Copying project declarations into another configuration leaves two representations to maintain.

A manifest can travel with its implementation and evolve alongside it. This bridge resolves that manifest at session startup, launches its local servers from the manifest directory, and keeps each session's connections separate.

Example: a design assistant for one application

Imagine a fictional field-notes application. Its design MCP knows local theme tokens, component variants, unpublished screen references, and the current branch's navigation conventions. A fuller implementation could offer:

  • read_design_tokens: read the palette, spacing, and typography from this checkout.

  • find_screen_references: locate approved screen captures.

  • inspect_component: explain a component's variants and constraints.

  • propose_screen: produce a mockup grounded in local assets.

Publishing that application's assets as a public MCP service would not make them useful to strangers. A hosted version would need access to unpublished files and could see a different revision from the branch being edited. A local server can read the checkout directly. It may still call a remote provider for a particular operation; local execution does not make every operation offline.

The runnable design-studio example is deliberately smaller. One read-only tool returns fictional tokens, with no network calls or company material:

git clone https://github.com/autobelay/claude-project-scoped-mcp.git
cd claude-project-scoped-mcp/examples/design-studio
claude

Ask: “Use the project-design MCP to read this project's design tokens.” The example server is bundled in the repository.

Project manifest

Claude Code already supports native project .mcp.json files. This plugin is for repositories using the portable mcp.json convention and a single user-scoped installation, without maintaining another set of server declarations for each client.

Place mcp.json at the project root:

{
  "mcpServers": {
    "project-design": {
      "type": "stdio",
      "title": "Project design assistant",
      "description": "Use this checkout's design system and screen references.",
      "command": "node",
      "args": ["tooling/design/server.mjs"],
      "env": { "DESIGN_TOKEN_FILE": "tooling/design/tokens.json" }
    },
    "project-docs": {
      "type": "streamable-http",
      "url": "https://example.com/mcp",
      "headers": { "Authorization": "Bearer ${env:DOCS_TOKEN}" }
    }
  }
}

The HTTPS URL is illustrative, not a working service. The project's mcp.json belongs to the bridge. The plugin's plugin.mcp.json configures Claude Code's connection to the bridge; it has a different role from a native Claude Code project .mcp.json. The bridge expands ${env:NAME} from its environment and does not read .env files. Do not commit credentials to a manifest. An interactive login managed by Claude Code is not automatically shared with a remote server behind this bridge; configure authenticated headers explicitly.

Claude Code substitutes ${CLAUDE_PLUGIN_ROOT} into the path of the bundled bridge and ${CLAUDE_PROJECT_DIR} into its --directory argument. The bridge walks upward from that directory to the nearest mcp.json, stopping at a Git checkout root (.git directory or worktree file). A nested checkout does not inherit its parent's manifest. A worktree needs its own manifest and server assets. Without a manifest, the bridge exposes only project_mcp_status.

Relative command arguments and environment values remain unchanged. Stdio servers run with the manifest's parent directory as cwd, so their relative file access follows that checkout. No manifest contents are copied into Claude Code's global MCP configuration. Each session owns its connections, which close when the session ends. Manifest changes take effect in a new session.

Supported features and limits

  • Model Context Protocol: uses the official TypeScript SDK for protocol negotiation and JSON-RPC transport. It accepts stdio, Streamable HTTP, and legacy SSE downstream, and presents stdio to Claude Code.

  • Project manifest: implements a practical mcp.json subset from the evolving Standard Client-Side Configuration Format proposal: mcpServers, named servers, transport types, commands, arguments, environment, headers, title, and description. This proposal is not a finalized universal standard. Interactive oauth configuration is unsupported.

  • Claude Code plugin: the native .claude-plugin/plugin.json, .claude-plugin/marketplace.json, and plugin.mcp.json package the bridge. The MCP entry launches node ${CLAUDE_PLUGIN_ROOT}/dist/bridge.cjs --directory ${CLAUDE_PROJECT_DIR}. Claude Code documents both substitutions for plugin MCP configuration. There are no lifecycle hooks.

Tools preserve input and output schemas, annotations, and structured, image, and text results. Names include the original server and tool labels plus a stable digest to avoid collisions. Manifest descriptions and downstream server instructions accompany tools. Paginated tool lists and tool-list change notifications are supported. Calls forward cancellation and use a five-minute timeout.

Listed resources and prompts are forwarded with namespaced identifiers. Resource templates, subscriptions, completion, sampling, elicitation, interactive OAuth, and experimental task execution are not implemented. The bridge does not advertise those capabilities. A normal tool that returns a job ID and provides polling tools works normally.

Connection attempts are concurrent and bounded to 30 seconds per initialization or list request. A failed server does not hide healthy servers' tools. project_mcp_status reports failures without printing raw credentials, child stderr, headers, or transport errors. A disconnected downstream server requires a new session to reconnect. Child stderr is drained and suppressed; diagnose a failing server directly in its checkout. Tool results are forwarded as returned by the server and can contain private data.

Installing the plugin enables commands in discovered project manifests to run. Use it with repositories whose tooling you trust. The bridge does not sandbox downstream servers or override Claude Code's permissions.

Distribution and development

This repository is an independent, public Claude Code plugin marketplace, not an Anthropic directory listing. Claude Code's publishing guide documents a single repository containing both a plugin and a marketplace entry whose source is "./".

The bundled executable speaks MCP over stdin and stdout outside the plugin. --directory PATH, --manifest PATH, and --only server-a,server-b are available for explicit embedding and diagnosis. Normal plugin installation supplies --directory automatically.

npm ci
npm run build
npm test

The synthetic tests cover discovery, project isolation, tool and resource forwarding, failed sibling servers, authenticated HTTP, and child environments. Built artifacts are committed so Git marketplace installation does not need dependency installation or a build hook. See local demonstration notes.

This bridge was adapted from the public Codex Project-scoped MCP implementation. Both repositories are MIT licensed. Bundled dependency notices are in THIRD_PARTY_NOTICES.

Available Tools

1 tool
project_mcp_statusA
Read-only

Report the discovered project manifest, server names, connection state and tool counts. Does not return credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, non-destructive, closed-world behavior. The description adds useful context beyond that: it reports discovered state and explicitly states that credentials are not returned, which is a meaningful security boundary for an agent. It does not address freshness or what happens when nothing has been discovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the verb and the returned contents, and the credential caveat is placed last where it belongs. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only status tool with no output schema, the description enumerates the key return fields well enough for an agent to interpret the result. Minor gaps remain around discovery freshness and empty-state behavior, but nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline is 4. Nothing in the description is needed to compensate for a schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Report') with a precisely enumerated set of returned contents: project manifest, server names, connection state, and tool counts. There are no sibling tools to confuse it with, and an agent knows exactly what this call yields without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to call it (to inspect project MCP state), but there is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. With no siblings and no parameters, the omission is low-risk but still a gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.1.0
    • First observedproject_mcp_status

TDQS

A4/5.0

Scored across 1 tool

Disambiguation5/5

There is only one tool, so there is no risk of selecting the wrong tool; its purpose is clearly scoped to status reporting.

Naming Consistency5/5

The single tool uses a consistent snake_case, prefixed name in a clear verb_noun-style pattern; with only one tool, no inconsistency is present.

Tool Count2/5

A single tool is very thin for a server named Project-scoped MCP; it provides only status reporting with no companion operations for managing or using project-scoped servers.

Completeness2/5

The surface is limited to status reporting; there are no tools to list projects, connect to or invoke project-scoped MCP servers, or refresh discovery, leaving significant operational gaps if the domain extends beyond diagnostics.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Wraps the Claude Agent SDK as MCP servers, letting you spawn multiple specialized Claude Code agents — each with its own model, tools, system prompt, and personality — from any MCP client.
    5
    49 npm
    21
    ISC
  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects MCP clients (Claude Desktop, Cursor, Cline, Zed) to llmsproxy.ai, exposing chat, coding, and retrieval capabilities as MCP tools, resources, and prompts.
    4 npm
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    One MCP that turns Claude Code into your whole dev stack by swallowing other MCP servers, delegating to Codex & Gemini on your CLI subscriptions, remembering projects in a searchable knowledge graph, and carrying setup across sessions — secret-free by design.
    23
    4
    MIT