Open Capability Manifest
The Open Capability Manifest (OCM) describes what an AI capability does, where it may run, what it costs, how fast it is and how to call it - for a model, an agent, a skill, a persona, a tool, a workflow, a human queue or a destination - in one vendor-neutral YAML or JSON file any router or gateway can consume. JSON Schema, a conformance corpus and a reference validator, Apache-2.0.
Free plan, no card. Open source under Apache-2.0; self-hosting is free forever.
From the benchmark
8
kinds of capability one schema describes
llm, agent, skill, persona, tool, workflow, human and destination - each with a valid manifest in the conformance corpus, each loadable as a routing target. The marketplace publishes its listings in this format and imports MCP servers, agent skills and A2A cards into it.
The whole benchmark, with the cases the router lostThe problem
A model has a price sheet, an agent has an A2A card, a tool has an MCP schema, a human queue has nothing at all - and none of them says where the thing may run, what data it may see or what it costs per call. So every catalogue is hand-written twice: once for the people and once for the router that has to choose.
How the router answers it
id, kind, capabilities (domains, actions, complexity band), constraints (regions, data boundary, PII, tenants), cost, latency percentiles, endpoints, examples and a quality prior - the same fields for a model, an agent, a skill, a persona, a tool, a workflow or a human queue.
A JSON Schema (2020-12) and a conformance corpus - a valid manifest per kind, invalid ones with the expected failure named - and a reference validator: osr validate rejects unknown top-level fields so typos surface before a request does; extension data goes under metadata.
A targets.yaml entry with ocm: "1" is a manifest; a directory of capability.yaml files is a catalogue. http and a2a endpoints bind to executors directly, an endpoint's region lets the router pick the in-region one, and the examples feed the similarity strategy and the evaluation dataset.
A real request
Drop this file into a catalogue and the agent competes with models, skills and people under the same policy: the data boundary and the region are constraints the router applies before scoring, the cost and latency feed the utility, the examples teach the similarity strategy.
ocm: "1"
id: acme/support-agent
kind: agent
description: Handles orders, refunds and account issues via internal tools.
capabilities: { domains: [customer_support], actions: [action, qa], supports_tools: true }
constraints: { data_boundary: private, regions: [eu], pii_allowed: true }
cost: { usd_per_call: 0.02 }
latency_ms: { p50: 1500, p95: 4000 }
endpoints:
- { protocol: a2a, url: https://agents.acme.com/support }
- { protocol: http, url: https://eu.agents.acme.com/support, region: eu }
examples: ["I want a refund for order #12345, it arrived damaged."]
quality_prior: 0.8Read next
Install
pip install opensmartroute && osr validate ./capabilitiesOr no install at all: the hosted API answers a plain curl with the decision, and the browser extension shows the price and the router's pick under the composer of the AI chat sites you already use.
OpenSmartRoute is open source and the free plan keeps the full trace of every decision. Create a workspace, mint a key and send the request above.
Free plan, no card. Fifteen thousand decisions a month with the full trace.