Skip to main content
Glama

mcp-a2a-bridge

An MCP server that lets coding agents — GitHub Copilot CLI, Claude Code, Codex, and Hermes — call remote A2A agents. It also includes an optional read-only activity dashboard.

Repository: https://github.com/TonPC64/mcp-a2a-bridge

Licensed under the MIT License.

For coding-agent instructions, start with AGENTS.md, then use skills/setup/SKILL.md for installation or skills/contribute/SKILL.md for changes and PRs.

Dashboard UI showcase

The optional dashboard uses a futuristic Liquid Glass interface with compact agent cards, live task activity, two-column task summaries, status indicators, and responsive layouts. This screenshot uses the opt-in frontend mock data mode so it is safe to reproduce without connecting to real agents or exposing logs.

A2A Bridge Dashboard desktop showcase

To run the same mock UI locally:

cd /absolute/path/to/mcp-a2a-bridge/dashboard
npm ci
npm run dev:mock -- --host 127.0.0.1

The mock mode is for UI development and screenshots only; normal builds use the live dashboard API and SSE.

Related MCP server: agntcy-mcp-server

Getting started

Choose your setup

Both profiles need Python 3.11 or later and uv. The optional dashboard frontend requires Node.js 24.15 or later; CI uses the latest Node.js 24 release.

MCP only

Install and run the MCP bridge only. This does not require Node.js/npm or a dashboard frontend build.

git clone https://github.com/TonPC64/mcp-a2a-bridge.git mcp-a2a-bridge
cd mcp-a2a-bridge
uv sync --locked

MCP + dashboard

Install the optional dashboard web runtime, then build its bundled frontend assets. Node.js and npm are needed only for this build (or frontend development), not to run an already-built dashboard.

git clone https://github.com/TonPC64/mcp-a2a-bridge.git mcp-a2a-bridge
cd mcp-a2a-bridge
uv sync --extra dashboard --locked
npm --prefix dashboard ci
npm --prefix dashboard run build

For development and tests, use uv sync --all-extras --locked; it includes the Python packages needed by the dashboard test suite. The commands below use /absolute/path/to/mcp-a2a-bridge. Replace it with the absolute path to your clone; do not copy another user's path.

Configure A2A agents

Create .a2a-agents.json in the repository root:

{
  "agents": {
    "example-agent": {
      "url": "https://agent.example.invalid",
      "headers": {
        "Authorization": "Bearer REPLACE_WITH_YOUR_TOKEN"
      }
    }
  }
}

Use the base URL of an A2A agent; the bridge requests its /.well-known/agent-card.json automatically. Remove Authorization (or use an empty headers object) when the agent does not require authentication. The registry can contain secrets, so do not commit it and restrict its file permissions where appropriate.

The registry location is resolved in this order:

  1. A2A_BRIDGE_CONFIG

  2. .a2a-agents.json in the bridge process's current directory

  3. ~/.config/a2a-bridge/agents.json

For a host that starts the MCP command outside the repository, set A2A_BRIDGE_CONFIG to an absolute path in that host's MCP environment. You can also add a verified agent at runtime with a2a_add_agent; by default it writes to the resolved registry file.

Register the MCP server

Each host should start the same local checkout command:

uv run --directory /absolute/path/to/mcp-a2a-bridge mcp-a2a-bridge

This uses the editable installation created above. Configure the host with the following portable path placeholder.

GitHub Copilot CLI — add this server to ~/.copilot/mcp-config.json:

{
  "mcpServers": {
    "a2a": {
      "type": "stdio",
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/mcp-a2a-bridge",
        "mcp-a2a-bridge"
      ]
    }
  }
}

Claude Code:

claude mcp add a2a -- uv run --directory /absolute/path/to/mcp-a2a-bridge mcp-a2a-bridge

Codex — add this to ~/.codex/config.toml:

[mcp_servers.a2a]
command = "uv"
args = ["run", "--directory", "/absolute/path/to/mcp-a2a-bridge", "mcp-a2a-bridge"]

Hermes: use its MCP server registration UI or command, choose a stdio server, and supply the command uv with these arguments:

run --directory /absolute/path/to/mcp-a2a-bridge mcp-a2a-bridge

Restart the host after registration, then call a2a_list_agents to confirm that the registry is available and the agents are reachable.

Expose the interactive Codex CLI as A2A (opt-in)

With Codex CLI 0.150.1 installed, run this separate adapter in another terminal:

uv run python examples/run_codex_interactive_a2a.py

It binds only to 127.0.0.1:9013, publishes /.well-known/agent-card.json, and registers a temporary unique entry in the resolved registry. The exact entry is removed on graceful shutdown. It starts codex app-server --stdio directly; it does not use codex exec or attach to an existing terminal TUI. Each adapter process starts one new ephemeral app-server thread. --thread-id ID may resume a known persisted thread only when app-server reports canAcceptDirectInput: true.

Use --port for another loopback port and --codex-bin when codex is not on the launcher PATH. The adapter has no public bind, token, or credential-file configuration.

Tools

Tool

Purpose

a2a_list_agents

List agents with skills and reachability

a2a_send_message

Send a message; continue a task with task_id

a2a_get_task

Poll a task started earlier

a2a_cancel_task

Cancel a running task

a2a_add_agent

Register an agent by URL

a2a_send_message waits up to timeout_s (60 seconds by default). If a task is still running, it returns done: false with a task_id; poll it with a2a_get_task. If an agent returns state: "input_required", call a2a_send_message again with the same task_id.

Dashboard

The optional standalone dashboard shows configured agents, their status/skills, and live task activity from bridge processes on the same machine. It is read-only: it never sends messages to agents.

Install the dashboard profile and build the assets before starting it:

cd /absolute/path/to/mcp-a2a-bridge
uv sync --extra dashboard --locked
npm --prefix dashboard ci
npm --prefix dashboard run build
uv run mcp-a2a-bridge-dashboard

It listens only on 127.0.0.1:9100 by default. Open http://127.0.0.1:9100 on the same machine.

Frontend mock data

To run the dashboard UI without the Python service or SSE, use the opt-in mock mode. It includes representative agents and task activity for screenshots:

cd /absolute/path/to/mcp-a2a-bridge/dashboard
npm ci
npm run dev:mock -- --host 0.0.0.0

Open the Vite URL on the same network. VITE_USE_MOCK_DATA=true is only used by the frontend build/dev server; normal npm run dev and production builds continue to use the live dashboard API and SSE.

Enable reporting for every bridge process whose activity should appear in the dashboard. Add this environment variable to the MCP server configuration (or when launching it manually):

A2A_BRIDGE_DASHBOARD=1 uv run --directory /absolute/path/to/mcp-a2a-bridge mcp-a2a-bridge

Bridge processes without that flag keep activity in memory and do not appear in the shared dashboard. The dashboard can start before or after them.

Environment variable

Default

Purpose

A2A_BRIDGE_CONFIG

Absolute path to the agents JSON registry

A2A_BRIDGE_DASHBOARD

unset (off)

Set to 1 to persist this bridge process's activity

A2A_BRIDGE_ACTIVITY_DB

~/.config/a2a-bridge/activity.sqlite3

Shared SQLite activity database

A2A_BRIDGE_ACTIVITY_SOURCE

remote

Source label for activity written by compatible processes

A2A_BRIDGE_DASHBOARD_HOST

127.0.0.1

Dashboard bind address

A2A_BRIDGE_DASHBOARD_PORT

9100

Dashboard port

A2A_BRIDGE_DASHBOARD_TOKEN

unset (off)

Optional bearer token that protects the dashboard and API

A2A_BRIDGE_HERMES_AUDIT

unset

Read-only override for Hermes' a2a_audit.jsonl

HERMES_HOME

unset

Used to find $HERMES_HOME/a2a_audit.jsonl when no override is set

LAN deployment

The dashboard can be exposed deliberately on a trusted LAN without a token by setting an explicit non-loopback bind. This mode has no authentication, so use it only on a private, trusted network; never expose it to the public internet.

For protected LAN access, set a strong token and put the service behind a TLS-terminating reverse proxy with its own network access controls:

export A2A_BRIDGE_DASHBOARD_HOST=0.0.0.0
export A2A_BRIDGE_DASHBOARD_TOKEN="$(openssl rand -hex 32)"
uv run mcp-a2a-bridge-dashboard

When a token is set, dashboard HTML, static assets, API routes, and SSE routes all require it. Browser users enter it once at /login; the resulting HttpOnly, same-site session cookie lets EventSource reconnect normally. API clients can instead send Authorization: Bearer <token>. The service never logs the token. A token authenticates access but does not encrypt traffic, so do not use the direct HTTP LAN endpoint across untrusted networks; use HTTPS at the reverse proxy.

For macOS, the launchd/com.example.a2a-bridge-dashboard.plist template can run the dashboard at login. Replace its __REPO__ and __HOME__ placeholders before installing it as a LaunchAgent.

Dashboard frontend development

Node.js 24.15+ and npm are only required to work on the frontend or rebuild its bundled assets:

cd /absolute/path/to/mcp-a2a-bridge/dashboard
npm ci
npm run dev

Vite prints the development URL (normally http://localhost:5173). Build the assets consumed by the Python dashboard with npm run build.

Copilot A2A server

The optional Copilot example requires an authenticated copilot CLI:

PYTHONPATH=examples:src python examples/run_copilot_main_dev.py 9010 --cwd /path/to/default/repository

It binds to 127.0.0.1 because it runs Copilot with --allow-all-tools. Its incoming activity can use the same opt-in shared SQLite store and is shown with source and destination fields in the dashboard.

The dashboard can also read Hermes' native audit file without modifying Hermes. It checks A2A_BRIDGE_HERMES_AUDIT, then $HERMES_HOME/a2a_audit.jsonl, then ~/.hermes/a2a_audit.jsonl.

Development and tests

Run the Python test suite from the repository root:

uv sync --all-extras --locked
uv run pytest -v

Run dashboard tests or make a production dashboard build from dashboard/:

npm test
npm run build

CI runs the Python suite on Python 3.11, validates uv.lock, and runs the dashboard install, tests, and production build on the latest Node.js 24 release.

tests/test_integration.py runs an A2A agent in-process and exercises the bridge end to end.

Available Tools

5 tools
a2a_add_agentA

Register a new A2A agent by its base URL.

The agent card is fetched first, so an unreachable URL is rejected instead of being saved. With persist=true the agent is written to the shared registry file and stays available in future sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
nameYes
headersNo
persistNo

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and it does meaningful work: it discloses that the agent card is fetched first, unreachable URLs are rejected instead of saved, and persist=true writes to a shared registry file. It does not cover every edge case, but it provides substantial insight into the tool's behavior.

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?

The description is three short, front-loaded sentences with no filler. The core action comes first, and the following sentences provide useful behavioral details without repeating the schema or wasting words.

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

Completeness3/5

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

The description adequately covers the main registration flow and persistence behavior, which is enough for a basic call. But it omits important context such as the purpose of headers, what the tool returns after successful registration, and the exact behavior when persist is false, leaving it short of fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for missing parameter explanations. It adds real meaning for 'url' (base URL) and 'persist' (shared registry file), but it leaves 'name' and especially 'headers' entirely unexplained, and does not clarify what persist=false means for session lifetime.

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

Purpose4/5

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

The first sentence names a concrete action ('Register') and a specific resource ('a new A2A agent'), and adds the mechanism ('by its base URL'). This makes the tool's purpose immediately clear and it is obviously distinct from sibling tools like list, send, get, and cancel, though it does not explicitly name those alternatives.

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 description implies when to use the tool through 'Register a new A2A agent,' and it gives some context about persistence across sessions. However, it never explicitly contrasts this tool with alternatives or states when not to use it, so the agent has to infer the usage boundary.

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

a2a_cancel_taskB

Cancel a running A2A task and return its final state.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
task_idYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose that cancellation returns a final state, which is useful, but it omits side effects, idempotency, error behavior, or whether cancellation is irreversible.

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?

A single, front-loaded sentence that states the core operation and the return value without any filler. Every word earns its place.

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

Completeness2/5

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

For a state-changing tool with no annotations and no output schema, this description is too thin. Missing details include parameter semantics, handling of non-running tasks, failure modes, and any irreversible consequences, leaving the agent to guess important call behavior.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no meaning to the 'agent' or 'task_id' parameters beyond their names. Neither the schema nor the description explains what values these accept or how they relate to the cancellation operation.

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?

The description uses a specific verb ('cancel') and a specific resource ('A2A task'), and clarifies that it returns the task's final state. This clearly distinguishes it from sibling tools like a2a_get_task or a2a_send_message, even without naming them.

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 description implies this tool is for active/running tasks, giving reasonable contextual usage. However, it does not explicitly state when not to use it, mention alternatives, or explain what to do if the task is already completed.

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

a2a_get_taskA

Get the current state and output of a previously started A2A task.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
task_idYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns state and output, and 'get' implies a read-only operation. However, it does not mention error behavior for unknown task IDs, whether the call is idempotent, or whether it affects task execution in any way.

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?

The description is a single, front-loaded sentence with no fluff. It efficiently communicates the tool's purpose and the key precondition that the task must already exist.

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

Completeness2/5

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

With no annotations, no output schema, and zero parameter descriptions, the tool description is too sparse. An agent cannot reliably know what value 'agent' expects, what the returned state/output structure looks like, or what happens when a task does not exist.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. The task_id parameter is reasonably inferable from the tool purpose, but 'agent' is ambiguous: it is not explained as an identifier, name, or what agent list it refers to. The description adds no parameter-level meaning.

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?

The description states a specific verb ('Get') and a specific resource ('current state and output of a previously started A2A task'). It is clearly distinguishable from siblings like a2a_send_message, a2a_cancel_task, a2a_list_agents, and a2a_add_agent, none of which retrieve task state.

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 phrase 'previously started' implies this should be used to poll or inspect tasks that were already kicked off, which gives a minimal context. However, it provides no explicit guidance about when to choose this over sibling tools, when not to use it, or whether it is intended for polling workflows.

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

a2a_list_agentsA

List configured A2A agents with their skills and reachability.

Set refresh=true to re-fetch agent cards that were previously cached.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo

TDQS

A4/5.0
Behavior3/5

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

No annotations exist, so the description carries the burden. It usefully discloses caching behavior and the effect of refresh, but it does not state that the operation is read-only, describe the return structure, or mention any potential side effects or prerequisites. Some relevant behavior remains implicit.

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 concise sentences: the first states the tool's purpose and result scope; the second explains the only parameter. No filler or duplication of the schema.

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 simple, single optional-parameter list operation, this description is largely complete. It identifies what the result includes, notes the caching behavior, and explains the parameter. A fully explicit return-format statement would be nice, but it is not essential for correct invocation.

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?

Schema description coverage is 0%, so the description must compensate. It does by explaining that refresh=true re-fetches cached agent cards. It stops short of explaining the exact behavior when refresh is false (e.g., serving from cache), but the meaning is strongly implied.

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?

The description states a specific action ('List'), a clear resource ('configured A2A agents'), and the relevant output facets ('skills and reachability'). It is immediately distinguishable from its siblings, which send messages or manage tasks.

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 refresh guidance is clear operational context ('Set refresh=true to re-fetch agent cards that were previously cached'). However, there is no explicit statement about when to prefer this tool over alternatives such as a2a_send_message or a2a_get_task; the distinction is only implied by the name.

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

a2a_send_messageA

Send a message to an A2A agent and return its reply.

Set provider to "litellm-auto" or "github" when the target agent supports provider selection. The selected provider is carried in the message for the local Copilot A2A agent; other agents may ignore it. Pass task_id to continue an existing task, for example to answer an agent that returned state="input_required". If the agent is still working when timeout_s elapses, this returns done=false with a task_id to poll rather than blocking.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
messageYes
task_idNo
providerNo
timeout_sNo
context_idNo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations available, the description carries the full behavioral burden. It discloses the asynchronous/non-blocking timeout behavior, the done=false + task_id polling contract, and the nuance that the provider field may be ignored by non-local agents. It does not mention auth, error cases, or side effects, but it covers the most important behavioral traits for correct invocation.

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?

The description is front-loaded with the core purpose and then supplies only high-value operational details: provider selection, task continuation, and polling behavior. Every sentence earns its place, and the length is appropriate for the complexity.

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

Completeness3/5

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

The description is useful for a complex async tool, but there is no output schema and no annotations, so the description must explain the return contract. It partially does by mentioning 'reply,' 'done=false,' and 'task_id,' yet it never describes the full response shape, error behavior, or the purpose of context_id. An agent could still be uncertain about the exact payload format.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaning for provider, task_id, and timeout_s, and the required agent and message parameters are inferable from 'send a message to an A2A agent.' However, context_id is never explained, leaving one of six parameters semantically undocumented.

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?

The description opens with a specific verb and resource: 'Send a message to an A2A agent and return its reply.' This clearly distinguishes the tool from its siblings (a2a_list_agents, a2a_get_task, a2a_cancel_task, a2a_add_agent), all of which serve different operations.

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

Usage Guidelines4/5

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

The description gives clear context for when to use it: sending messages, continuing existing tasks via task_id, responding to state="input_required", and handling non-blocking timeouts. It does not explicitly name a2a_get_task as the polling alternative, but strongly implies the polling workflow by mentioning 'to poll rather than blocking.'

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. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.0
    • First observeda2a_add_agent
    • First observeda2a_cancel_task
    • First observeda2a_get_task
    • First observeda2a_list_agents
    • First observeda2a_send_message

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a distinct purpose: listing agents, sending messages, getting task state, cancelling tasks, and adding agents. No overlap or ambiguity between them.

Naming Consistency5/5

All tools follow a consistent 'a2a_' prefix followed by a verb_noun pattern (list_agents, send_message, get_task, cancel_task, add_agent). Naming is predictable and uniform.

Tool Count5/5

Five tools is well-scoped for an A2A bridge: listing, messaging, task management, and agent registration cover the core functionality without being excessive or sparse.

Completeness4/5

The tool surface covers the essential operations for an A2A bridge. A remove_agent or update_agent tool is missing, but it's not critical; the set supports the primary workflows adequately.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TonPC64/mcp-a2a-bridge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server