Skip to main content

CALM Hub — MCP & API Reference

CALM Hub exposes two API surfaces:

  1. REST API - the primary interface, fully documented via OpenAPI/Swagger UI.
  2. MCP server - an experimental Model Context Protocol endpoint for AI-agent integrations.

REST API​

OpenAPI Specification​

CALM Hub uses SmallRye OpenAPI (Quarkus extension) to auto-generate an OpenAPI 3 specification from the JAX-RS resource annotations. The spec reflects the live configuration of the running instance (all endpoints, request/response schemas, security scopes).

EndpointDescription
/q/openapiOpenAPI 3 specification (YAML)
/q/openapi?format=jsonOpenAPI 3 specification (JSON)
/q/swagger-uiInteractive Swagger UI explorer

The Swagger UI is always included in the image (quarkus.swagger-ui.always-include=true), so it is available in production as well as development.

Base URL​

CALM Hub exposes two REST surfaces:

Numeric-id storage API — /api/calm/...

The primary CRUD interface for namespaces, architectures, patterns, flows, standards, and other artefacts. Resources are addressed by server-assigned numeric IDs.

GET /api/calm/namespaces
POST /api/calm/namespaces
GET /api/calm/namespaces/{namespace}/architectures
POST /api/calm/namespaces/{namespace}/architectures
GET /api/calm/namespaces/{namespace}/architectures/{id}/versions/{version}

Name-based API — /calm/...

A user-facing layer that maps human-readable names (slugs) to their numeric IDs and provides versioned access by name. All paths include a /versions/ segment.

POST /calm/namespaces/{namespace}/architectures/{name}/versions/{version}
GET /calm/namespaces/{namespace}/architectures/{name}/versions
GET /calm/namespaces/{namespace}/architectures/{name}/versions/{version}
GET /calm/namespaces/{namespace}/architectures

The full endpoint list with request/response schemas is visible in the Swagger UI at /q/swagger-ui.

Access Control​

Endpoints are protected by per-namespace permissions. Access is granted via UserAccess records stored in the active backend; each record ties a username to a permission level for a specific namespace or control domain.

PermissionScopeWhat it grants
readnamespaceRead artefacts in a namespace
writenamespaceRead + write artefacts (implies read)
adminnamespaceRead + write + manage access grants (implies write)
domain_readcontrol domainRead controls in a domain
domain_writecontrol domainWrite controls in a domain
global_adminall namespacesBypasses all namespace permission checks (admin on the reserved GLOBAL namespace)

Namespace permissions follow a hierarchical model using . as a separator (org, org.team, org.team.project). read is AND-ed across the ancestor chain (every level must have a matching grant); write and admin cascade from any ancestor via OR. See calm-hub/PERMISSIONS.md and the entitlements guide for the full model.

When running without the secure Quarkus profile, authentication is disabled and all endpoints are accessible without a token.


MCP Server​

Experimental

The MCP server is disabled by default and is currently experimental. The API surface may change between releases.

What Is MCP?​

The Model Context Protocol (MCP) is an open standard for connecting AI language models to external tools and data sources. CALM Hub's MCP server exposes its artefact store as a set of callable tools that an LLM can invoke to query architectures, patterns, controls, and more.

Enabling the MCP Server​

# application.properties (or pass as env var)
calm.mcp.enabled=true
# Via environment variable
export CALM_MCP_ENABLED=true
../mvnw quarkus:dev

The MCP endpoint is always registered at /mcp (HTTP Streamable transport). The calm.mcp.enabled flag gates whether the tool handlers are active — with it set to false the endpoint is reachable but all tool calls return a disabled response.

Endpoint​

POST /mcp
Content-Type: application/json

CALM Hub uses the HTTP Streamable MCP transport (Quarkiverse quarkus-mcp-server-http, version 1.12.1). This transport uses JSON-RPC 2.0 over HTTP POST.

Available Tools​

Tool providerExample tools
ArchitectureToolslist_architectures, get_architecture
PatternToolslist_patterns, get_pattern
ControlToolslist_controls, get_control
DomainToolslist_domains, create_domain
InterfaceToolslist_interfaces, get_interface
NamespaceToolslist_namespaces, create_namespace
SearchToolssearch_architectures
StandardToolslist_standards
TimelineToolsget_timeline
AdrToolslist_adrs, get_adr

To retrieve the full tool list from a running instance:

curl -s -X POST http://localhost:8080/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
| jq '.result.tools[].name'

Example Tool Call​

# List all namespaces via MCP
curl -s -X POST http://localhost:8080/mcp \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "list_namespaces",
"arguments": {}
}
}'

Testing with Quarkus Dev UI​

When running in quarkus:dev mode with %dev.quarkus.mcp.server.traffic-logging=true, all JSON-RPC messages are printed to the console. The Quarkus Dev UI also ships an interactive MCP tester.

Connecting an AI Client​

Any MCP-compatible AI client (e.g. Claude Desktop, Cursor, VS Code with an MCP extension) can connect to CALM Hub by adding it as an HTTP MCP server pointing at http://<host>:8080/mcp.

Example mcp.json entry for Claude Desktop or a compatible client:

{
"mcpServers": {
"calm-hub": {
"url": "http://localhost:8080/mcp",
"transport": "http"
}
}
}

Further Reading​