Four callables.
One surface.
Don't hard-code model lists or agent URLs. Discover what's available, inject Skills, attach MCP tools, then call Models and Agents from the same SDK.
Models
Unified inference layer
One API key, 50+ models. OpenAI-compatible completions, embeddings, and vision — routed to the best provider for each request.
- OpenAI-compatible REST & SSE
- Weighted fallback routing
- Per-model budget controls
- Prompt caching awareness
Skills
Server-side prompt engine
Version-locked prompt templates + tool schemas injected server-side. Ship a skill ZIP, version-pin with @v3, never ship prompts in client code again.
- Jinja2 template rendering
- Version pinning (@v3)
- Tool schema bundling
- Immutable after publish
MCPs
Model Context Protocol gateway
Proxy any MCP server with full auth (OAuth, PKCE, BYOK) and a 6-level permission cascade. Track per-tool spend, approve or deny access.
- 6-level permission cascade
- OAuth2 + PKCE passthrough
- Per-tool cost tracking
- URL-namespaced access
Agents
A2A runtime
A2A-protocol-compliant agents with agent cards, streaming invocation, and versioned rollback. Register once, discover everywhere.
- Agent card (.well-known)
- SSE + NDJSON streaming
- Versioned snapshots
- Health check + webhooks
One discovery endpoint
Everything you can discover via GET /v1/capabilities, you can call.
The proxy bundles them transparently \u2014 no client-side orchestration needed.
{
"models": ["gpt-4o", "claude-sonnet-4-6", "deepseek-v3.2", ...],
"skills": ["fact-check@v3", "code-review@v2", "summarize@v1"],
"mcps": ["github", "linear", "jira", "search", "sheets"],
"agents": ["research-agent", "qa-agent", "deploy-agent"]
}
// pick anything — then call it
$ xct chat completions create \
--model gpt-4o \
--skills "fact-check@v3" \
--tools github.search_issues \
--message "Find regressions in main" Try everything today
Free tier includes all four capabilities across the entire model catalog.
Start free