Decibel Tools API
HTTP interface to the Decibel MCP server. Supports the MCP protocol (SSE + StreamableHTTP), a REST convenience layer, and multi-agent coordination.
https://senken.pro
Authentication
When the server is started with --auth-token, all mutating endpoints require a Bearer token. Health and discovery endpoints are always public.
Authorization: Bearer YOUR_TOKEN
Alternatively, pass a license key for tier-gated access:
X-License-Key: YOUR_LICENSE_KEY
Error Handling
All endpoints return a consistent JSON envelope.
// Success
{ "status": "executed", ... }
// Error
{
"status": "error",
"error": "Human-readable message",
"code": "ERROR_CODE"
}
| Code | HTTP | Meaning |
|---|---|---|
UNAUTHORIZED | 401 | Missing or invalid auth token |
RATE_LIMITED | 429 | Too many requests |
MISSING_TOOL | 400 | Tool not found in registry |
ACCESS_DENIED | 403 | Facade not in agent's allowlist or tier |
BODY_TOO_LARGE | 413 | Request body exceeds 1MB |
PARSE_ERROR | 400 | Invalid JSON in request body |
NOT_DAEMON | 503 | Agent management endpoint requires daemon mode |
TOOL_ERROR | 500 | Tool execution failed |
SSE Transport
Server-Sent Events transport for the MCP protocol. Used by ChatGPT and other MCP clients that prefer streaming.
Opens a persistent SSE connection for bidirectional MCP communication. The server sends keepalive comments every 30 seconds to maintain the connection.
Connection
curl -N https://senken.pro/sse/
Details
| Methods | GET (stream), POST (messages), DELETE (close) |
| Content-Type | text/event-stream |
| Keepalive | Comment heartbeat every 30s (configurable via --sse-keepalive) |
| CORS | All origins allowed |
| Auth | Token if set |
Notes
The trailing slash matters for some clients (e.g., ChatGPT). Both /sse and /sse/ are accepted.
StreamableHTTP (JSON-RPC)
The primary MCP protocol endpoint. Supports the full MCP spec via JSON-RPC over HTTP.
Send MCP protocol messages (JSON-RPC 2.0). This is the recommended transport for programmatic access.
Example: List Tools
curl -X POST https://senken.pro/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}'
Example: Call a Tool
curl -X POST https://senken.pro/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "sentinel",
"arguments": {
"action": "list_issues",
"project_id": "my-project"
}
}
}'
Supported Methods
| Method | Description |
|---|---|
initialize | Initialize MCP session |
tools/list | List available tools (facades) |
tools/call | Execute a tool |
resources/list | List available resources |
resources/read | Read a resource |
prompts/list | List available prompts |
prompts/get | Get a prompt |
Details
| Methods | GET, POST, DELETE |
| Content-Type | application/json |
| CORS | All origins allowed |
| Auth | Token if set |
List Tools
Discover available facades and their actions.
Returns all registered facades and their actions. Responds with JSON or HTML based on the Accept header.
Example
curl https://senken.pro/tools \
-H "Accept: application/json"
Response
{
"status": "executed",
"version": "{{VERSION}}",
"api_version": "v1",
"tools": [
{
"name": "sentinel",
"description": "Work tracking: epics, issues, incidents",
"actions": ["create_issue", "list_issues", "log_epic", ...]
},
{
"name": "swarm",
"description": "Multi-agent sessions and signals",
"actions": ["start_session", "join_session", "emit_signal", ...]
}
]
}
| Auth | Public |
Execute Tool
Call any tool directly via the REST convenience layer.
Generic dispatch endpoint. Pass the tool name and arguments. The kernel routes to the correct facade and action.
Request
curl -X POST https://senken.pro/call \
-H "Content-Type: application/json" \
-H "Authorization: Bearer TOKEN" \
-d '{
"tool": "sentinel",
"arguments": {
"action": "list_issues",
"project_id": "decibel-tools-mcp"
}
}'
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
tool | string | Yes | Facade or tool name |
arguments | object | Yes | Tool-specific parameters |
Response
{
"status": "executed",
"result": { ... }
}
Context Headers
Include optional headers to identify the calling agent and trace requests. See Context Headers.
| Auth | Token if set |
Batch Execute
Execute multiple independent tool calls in parallel.
Send up to 20 calls in a single request. All calls execute concurrently via Promise.allSettled. Ideal for agent bootstrap (fetching context + issues + roadmap in one round-trip).
Request
curl -X POST https://senken.pro/batch \
-H "Content-Type: application/json" \
-H "X-Agent-Id: analyst-01" \
-d '{
"calls": [
{ "facade": "sentinel", "action": "list_issues", "params": { "project_id": "my-project" } },
{ "facade": "oracle", "action": "next_actions", "params": { "project_id": "my-project" } },
{ "facade": "context", "action": "refresh", "params": { "task": "status check" } }
],
"context": {
"agentId": "analyst-01",
"runId": "run-abc"
}
}'
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
calls | array | Yes | Array of call objects (max 20) |
calls[].facade | string | Yes | Facade name |
calls[].action | string | Yes | Action name |
calls[].params | object | No | Action parameters |
context | object | No | Shared context for all calls |
Response
{
"status": "executed",
"results": [
{ "status": "executed", ... },
{ "status": "executed", ... },
{ "status": "error", "error": "...", "code": "..." }
]
}
| Max calls | 20 per batch |
| Auth | Token if set |
List Facades
Facade registry for agent bootstrap and capability discovery.
Returns all facades with their descriptions, actions, and tier. Use the tier query param to control verbosity.
Example
curl "https://senken.pro/facades?tier=compact"
Query Parameters
| Param | Values | Description |
|---|---|---|
tier | full, compact, micro | Description verbosity level (default: full) |
Response
{
"status": "executed",
"facades": [
{
"name": "sentinel",
"description": "Work tracking: epics, issues, incidents...",
"actions": ["create_issue", "list_issues", "log_epic", ...],
"tier": "core"
}
],
"facade_count": 30,
"internal_tool_count": 170
}
| Auth | Public |
Agent Connect
Register an agent with the daemon's agent registry. Required for multi-agent coordination.
Registers an agent with the daemon. Returns the agent's capabilities, allowed facades, tier, and rate limit. Only available in daemon mode.
Request
curl -X POST https://senken.pro/connect \
-H "Content-Type: application/json" \
-d '{
"agent_id": "analyst-01",
"capabilities": ["sentinel", "oracle", "context"]
}'
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
agent_id | string | Yes | Unique agent identifier |
capabilities | string[] | No | Facade names the agent needs |
Response
{
"status": "executed",
"agent_id": "analyst-01",
"connected_at": "2026-03-30T19:35:00.000Z",
"capabilities": ["sentinel", "oracle", "context"],
"allowed_facades": ["sentinel", "oracle", "context"],
"tier": "pro",
"rate_limit_rpm": 100
}
| Requires | Daemon mode (--daemon) |
| Error | 503 NOT_DAEMON if not in daemon mode |
Agent Disconnect
Gracefully unregister an agent from the daemon.
Request
curl -X POST https://senken.pro/disconnect \
-H "Content-Type: application/json" \
-d '{ "agent_id": "analyst-01" }'
Response
{
"status": "executed",
"agent_id": "analyst-01",
"disconnected": true
}
List Agents
See all currently connected agents.
Example
curl https://senken.pro/agents
Response
{
"status": "executed",
"agents": [
{
"id": "analyst-01",
"connected_at": "2026-03-30T19:35:00.000Z",
"capabilities": ["sentinel", "oracle"],
"last_seen": "2026-03-30T19:40:00.000Z"
}
],
"count": 1
}
| Auth | Public |
Event Stream
Real-time SSE stream of dispatch events. Monitor tool calls as they happen.
Opens an SSE stream that emits every tool dispatch as it happens. Useful for dashboards, audit logs, and debugging agent behavior.
Example
curl -N "https://senken.pro/events/stream?agent_id=analyst-01"
Query Parameters
| Param | Type | Description |
|---|---|---|
agent_id | string | Filter by agent (optional) |
facade | string | Filter by facade (optional) |
Event Format
data: {
"timestamp": "2026-03-30T19:35:12.345Z",
"agentId": "analyst-01",
"facade": "sentinel",
"action": "list_issues",
"duration_ms": 42,
"status": "ok"
}
| Auth | Public |
Query Events
Query the dispatch event log for historical tool calls.
Query Parameters
| Param | Type | Description |
|---|---|---|
since | ISO 8601 | Events after this timestamp |
agent_id | string | Filter by agent |
limit | number | Max events (default: 100) |
Response
{
"status": "executed",
"events": [ ... ],
"total": 42
}
Health Check
System health and runtime info.
Response
{
"status": "ok",
"version": "{{VERSION}}",
"api_version": "v1",
"uptime_ms": 3600000,
"uptime_human": "1h 0m 0s",
"pid": 12345,
"facade_count": 30,
"internal_tool_count": 170,
"connected_clients": 2,
"active_requests": 0,
"connected_agents": 3,
"pro": true,
"license_tier": "pro",
"supabase_configured": true
}
| Auth | Public |
Readiness Probe
Returns 200 when the server is ready to accept requests, 503 otherwise.
{ "ready": true, "facade_count": 30 }
Context Headers
Optional headers for multi-agent tracing and access control. Passed through to the dispatch kernel on every /call and /batch request.
| Header | Description |
|---|---|
X-Agent-Id | Agent identifier (used for rate limiting, event attribution, facade scoping) |
X-Run-Id | Run/session ID for grouping related calls |
X-Parent-Call-Id | Parent call ID for distributed tracing |
X-Scope | Scope hint for the kernel |
X-Engagement-Mode | Engagement mode selector |
X-User-Key | User identifier |
X-Request-Id | Request tracking ID |
X-License-Key | License key (overrides config for tier resolution) |
X-Allowed-Facades | Comma-separated facade whitelist (restricts which facades this call can access) |
Rate Limiting
Sliding window rate limiter, scoped per IP or per agent.
/connect get their own limit that can be configured in the daemon config.
When rate limited, the server returns:
HTTP 429
{
"status": "error",
"error": "Rate limited",
"code": "RATE_LIMITED"
}
Facade Tiers
Facades are grouped into three access tiers. In development, all tiers are enabled. In production, pro and apps tiers require environment variables or a valid license key.
| Tier | Count | Gate | Facades |
|---|---|---|---|
| core | 21 | Always available | sentinel, architect, dojo, designer, git, workflow, oracle, roadmap, vector, context, auditor, forecast, velocity, coordinator, swarm, friction, registry, feedback, learnings, provenance, bench, guardian |
| pro | 4 | License key required | voice, studio, corpus, agentic |
| apps | 2+ | DECIBEL_APPS=1 |
senken, mother, terminal |
Decibel Tools v{{VERSION}} · @decibelsystems/tools on npm · Built by Decibel Systems