Skip to content

Repository files navigation

a2a-splunk

(日本語版 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.


Architecture

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
Loading

Files

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)

Setup

1. Dependencies

pip install a2a-sdk sse_starlette fastapi uvicorn nicegui httpx \
            langchain-mcp-adapters langchain-core langchain-openai

2. Create config.ini

cp config.ini.example config.ini

Set 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_here

SPLUNK_MCP_URL varies by realm — check the official docs' Supported Regions page.

3. Run

# 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        # :8210

Open http://localhost:8210 in your browser and ask a question, either via a suggestion button or free text.

4. Calling it directly, without the UI

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?"}]}}'

License

MIT License (see LICENSE) Copyright (c) 2026 hidemi-k

About

Splunk Observability bridge exposing MCP servers via the A2A protocol for unified monitoring automation.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages