(日本語版 README: README.ja.md)
An independent bridge agent that exposes the Splunk Observability Cloud MCP server over the A2A (Agent2Agent) protocol.
A2A is a protocol for "agents talking to agents as peers"; MCP is a protocol for "agents calling tools" — the two have different design philosophies. This project explores what it takes to bridge them, using the Splunk MCP server (GA'd February 2026) as the concrete example.
flowchart LR
SM["Splunk Observability Cloud"]
SP["Splunk MCP server"]
BR["splunk_a2a_bridge.py<br/>(A2A server, :8200)"]
UI["splunk_bridge_ui.py<br/>(investigation chat UI, :8210)"]
CL["Any A2A client"]
SM --> SP
SP <-->|MCP| BR
CL -->|A2A message:send| BR
UI -->|A2A message:send| BR
| File | Role |
|---|---|
splunk_a2a_bridge.py |
A2A server itself, implemented with the a2a-sdk's AgentExecutor pattern |
splunk_mcp_tools.py |
Splunk MCP server tool-calling logic (binds tools to an LLM and lets it answer on its own) |
splunk_bridge_ui.py |
A simple investigation chat UI (NiceGUI) for asking the bridge natural-language questions |
llm_factory.py / response_schema.py / i18n.py |
Shared utilities reused across several of my personal projects (unmodified) |
config.ini.example |
Configuration file template |
telemetry/ |
Example telemetry-collection config used for verification in a personal lab (containerlab, two Linux hosts + Arista cEOS). Ships metrics to Splunk Observability Cloud via the Splunk OTel Collector (host metrics) and telegraf (gNMI) |
pip install a2a-sdk sse_starlette fastapi uvicorn nicegui httpx \
langchain-mcp-adapters langchain-core langchain-openaicp config.ini.example config.iniSet your LLM API key in the [GROQ] section, and your Splunk MCP Gateway connection info in the [SPLUNK] section.
[GROQ]
GROQ_API_KEY = your_groq_api_key_here
GROQ_BASE_URL = https://api.groq.com/openai/v1
GROQ_MODEL = openai/gpt-oss-120b
[SPLUNK]
SPLUNK_MCP_URL = https://region-xxxx.api.scs.splunk.com/system/mcp-gateway/v1/
SPLUNK_SF_REALM = your_realm
SPLUNK_SF_TOKEN = your_token_hereSPLUNK_MCP_URL varies by realm — check the official docs' Supported Regions page.
# Terminal 1: the bridge itself
python splunk_a2a_bridge.py # :8200
# Terminal 2: investigation UI
export BRIDGE_URL=http://localhost:8200
python splunk_bridge_ui.py # :8210Open http://localhost:8210 in your browser and ask a question, either via a suggestion button or free text.
curl -X POST http://localhost:8200/message:send \
-H "Content-Type: application/json" \
-H "A2A-Version: 1.0" \
-d '{"message":{"role":"ROLE_USER","messageId":"1","parts":[{"text":"Are there any recent alerts?"}]}}'MIT License (see LICENSE) Copyright (c) 2026 hidemi-k