Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
MCP auth middleware: gate tool calls so only authorized agents can act.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"bolyra": {
"command": "npx",
"args": [
"-y",
"@bolyra/mcp"
]
}
}
}ターミナルでこれを実行します
claude mcp add bolyra -- npx -y @bolyra/mcpプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"bolyra": {
"command": "npx",
"args": [
"-y",
"@bolyra/mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"bolyra": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@bolyra/mcp"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント bolyra で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.6.4)がレジストリに届いたのは5 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Zendesk
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Zendesk MCP Pack — tickets, users, organizations via OAuth.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Gate MCP tool calls so only authorized agents can call sensitive tools.
npm install @bolyra/mcp @bolyra/sdk @modelcontextprotocol/sdk
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { withBolyraAuthStdio } from '@bolyra/mcp';
const server = new McpServer({ name: 'my-server', version: '1.0.0' });
server.tool('read_file', { path: { type: 'string' } }, async (args) => ({ content: [{ type: 'text', text: Reading ${args.path} }], }));
withBolyraAuthStdio(server.server, { devMode: true, toolPolicy: { // 1n = READ_DATA, 2n = WRITE_DATA (BigInt — add 'n' suffix) read_file: 1n, }, });
That's it. Every tools/call now requires a valid Bolyra proof bundle.
Dev mode uses mock proofs — no circuit artifacts, no trusted setup, instant startup. Use it to build and test your server before wiring real ZKP verification.
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { withBolyraAuthStdio } from '@bolyra/mcp';
// Server const server = new McpServer({ name: 'my-server', version: '1.0.0' });
server.tool('read_file', { path: { type: 'string' } }, async (args) => ({ content: [{ type: 'text', text: 'file contents...' }], }));
withBolyraAuthStdio(server.server, { devMode: true, toolPolicy: { // 1n = READ_DATA, 2n = WRITE_DATA (BigInt — add 'n' suffix) read_file: 1n, write_file: 2n, }, });
await server.connect(new StdioServerTransport());
Client side:
import { createDevIdentities, attachBolyraProof } from '@bolyra/sdk';
const { human, agent } = await createDevIdentities(); const auth = await attachBolyraProof(human, agent, { devMode: true });
// stdio await client.callTool({ name: 'read_file', arguments: { path: '/tmp/x' }, _meta: auth.meta }); // HTTP await fetch('/mcp', { headers: { ...auth.headers }, ... });
Every tools/call request must carry a proof bundle: a pair of Groth16 proofs (one from the human's circuit, one from the agent's) bound to a shared session nonce.
The server side:
params._meta.bolyra (stdio) or the Authorization: Bolyra header (HTTP).BolyraAuthContext to the request for downstream handlers.Discovery calls (initialize, tools/list) pass through unauthenticated.
Delegation chains (v=2 bundles) narrow scope from root credential to leaf agent across multiple hops. The effective bitmask seen by tool policies is always the leaf's — the most-restricted scope.
withBolyraAuthStdio(server: McpServer, config: BolyraMcpConfig): void
Wraps an McpServer instance. Must be called before server.connect(transport).
bolyraAuthMiddleware(config: BolyraMcpHttpConfig): express.RequestHandler
Express middleware. Mount before your MCP HTTP handler. Rejects unauthenticated tools/call requests with HTTP 401.
attachBolyraProof(
human: HumanIdentity, agent: AgentCredential, options?: AttachProofOptions, ): Promise
Runs a handshake and returns { headers, meta, bundle }. Pass options.devMode = true to skip real proving and emit a mock bundle.
attachDelegatedBolyraProof(
human: HumanIdentity, rootCred: AgentCredential, hops: DelegationHopSpec[], options?: AttachProofOptions, ): Promise
Like attachBolyraProof but walks a delegation chain and returns a v=2 bundle.
verifyBundle(bundle: BolyraProofBundle, config: BolyraMcpConfig): Promise<BolyraAuthContext>
Verify a bundle directly — useful for custom transports or offline verification.
checkToolPolicy(
toolName: string, ctx: BolyraAuthContext, policy: ToolPermissionPolicy, ): { allowed: boolean; reason?: string }
Check a BolyraAuthContext against a tool's required bitmask.
createDevIdentities(options?: DevIdentityOptions): Promise<DevIdentities>
Returns fixed-seed { human, agent, operatorKey } — deterministic, no circuit artifacts required. Logs a warning on first call. Never use in production.
Swap devMode: true for a real resolveCredential resolver and point the SDK at your circuit artifacts:
withBolyraAuthStdio(server, {
resolveCredential: async (commitment) => myRegistry.get(commitment), toolPolicy: { // 1n = READ_DATA, 2n = WRITE_DATA (BigInt — add 'n' suffix) read_file: 1n, write_file: 2n, }, sdkConfig: { circuitDir: '/path/to/circuits/build', rpcUrl: 'https://sepolia.base.org', registryAddress: '0x2781dF8b6381462d881C833Fb703d68c661c9577', }, });
Full config interface:
interface BolyraMcpConfig {
network?: string; // DID network label (default: 'base-sepolia') minScore?: number; // Minimum score floor 0–100 (default: 70) maxProofAge?: number; // Nonce freshness window in seconds (default: 300) toolPolicy?: ToolPermissionPolicy; devMode?: boolean; // Mock verification — dev/test only resolveCredential?: (commitment: string) => Promise ; sdkConfig?: BolyraConfig; }
The HTTP variant adds authScheme?: string (default "Bolyra").
| Transport | Bundle location | Notes |
|---|---|---|
| stdio (Claude Desktop, Cursor, Cline) | params._meta.bolyra | MCP spec defines no stdio auth surface; _meta is the only protocol-level field |
| HTTP / SSE / Streamable-HTTP | Authorization: Bolyra | Custom auth scheme per RFC 7235; aligns with OAuth 2.1 resource-server pattern |
Both produce the same BolyraAuthContext on the server side. Tool handlers don't need to know which transport was used.
See examples/protected-file-server/ for a complete stdio server + client pair using dev mode. Run it with:
cd integrations/mcp
npm run example:protected-file-server