API documentation
Unabyss MCP API Reference
Streamable HTTP JSON-RPC API for personal context tools at mcp.unabyss.com
Last updated 6 June 2026 · 4 min read
The Unabyss MCP server exposes a Model Context Protocol (MCP) API over HTTPS. Clients send JSON-RPC 2.0 requests to a single endpoint and receive JSON responses. The server implements MCP protocol version 2025-06-18 with tools (no static resources).
Base URL
| Item | Value |
|---|---|
| MCP endpoint | https://mcp.unabyss.com |
| Protocol | MCP Streamable HTTP (JSON-RPC 2.0) |
| MCP version | 2025-06-18 |
| Content-Type | application/json |
| Accept | application/json (recommended) or application/json, text/event-stream |
All requests use POST. There is no REST-style path per tool; tools are invoked through the JSON-RPC tools/call method.
Authentication
Send a bearer token on every request:
Authorization: Bearer unby_mcp_...
Content-Type: application/json
Accept: application/json
Static bearer tokens
- Sign in at app.unabyss.com/mcp.
- Click Generate token and copy the plaintext value (shown once).
- Tokens use the
unby_mcp_prefix.
Revoke or edit token permissions from the same page.
OAuth 2.0 (optional)
Unabyss also supports OAuth 2.0 authorization code + PKCE for MCP hosts that implement dynamic client registration. Discovery metadata is published at:
https://mcp.unabyss.com/.well-known/oauth-protected-resourcehttps://mcp.unabyss.com/.well-known/oauth-authorization-server
Supported scopes: read, write.
JSON-RPC envelope
Every request body is a JSON object:
{
"jsonrpc": "2.0",
"id": 1,
"method": "<method>",
"params": {}
}
Successful responses:
{
"jsonrpc": "2.0",
"id": 1,
"result": {}
}
Error responses use HTTP status codes that match the error class (401, 400, 429, etc.) and a JSON-RPC error object:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32603,
"message": "Human-readable message",
"data": {
"code": "unauthorized"
}
}
}
The data.code field carries a machine-readable MCP error code (see Error codes).
Methods
initialize
Handshake. Returns server info and capabilities.
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": {
"name": "my-client",
"version": "1.0.0"
}
}
}
Result (abbreviated)
{
"protocolVersion": "2025-06-18",
"serverInfo": {
"name": "unabyss-mcp",
"version": "0.1.0"
},
"capabilities": {
"tools": { "listChanged": false },
"prompts": { "listChanged": false }
},
"instructions": "..."
}
tools/list
Returns all tools the authenticated token may call. Use this to verify credentials without running a heavy tool.
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}
Result (shape)
{
"tools": [
{
"name": "query",
"description": "...",
"inputSchema": { "type": "object", "properties": {}, "required": [] }
}
]
}
tools/call
Invoke a tool by name.
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "whoami",
"arguments": {}
}
}
Result (shape)
{
"content": [
{
"type": "text",
"text": "Answer or JSON string"
}
],
"isError": false,
"structuredContent": {}
}
content[0].text- primary text payload (always present for successful calls).structuredContent- optional typed JSON for tools that return structured data (e.g.store,export_list).
Tools
The table lists tools exposed by the Unabyss MCP server. Call tools/list for the live catalog including input schemas.
| Tool | Purpose | Required arguments |
|---|---|---|
whoami |
Return the user's persisted identity summary | none |
query |
Natural-language lookup against stored context | question (string, max 8 KB) |
store |
Persist durable text to the knowledge base | memory (string, max 32 KB) |
list_integrations |
List connected integrations and catalog apps available to connect | none |
agentic_query |
Deep multi-step synthesis; may return pending + query_id |
question (string, max 8 KB) |
agentic_query_read |
Poll a pending agentic_query result |
query_id (string, UUID) |
export_list |
List markdown exports | search (optional), limit (optional int) |
export_read |
Read full markdown for a ready export | export_id (string, UUID) |
export_create_from_text |
Save markdown as an export instantly | content (required), title (optional), topic_text (optional) |
Additional tools (propose_connection, update_identity, export_create, export_refresh) are available to full MCP clients but are not required for automation integrations.
Example: whoami
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "whoami",
"arguments": {}
}
}
Example: query
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "query",
"arguments": {
"question": "What projects am I working on?"
}
}
}
Example: store
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "store",
"arguments": {
"memory": "Prefers OAuth over static API keys for third-party integrations."
}
}
}
Structured response acknowledges the store request:
{
"content": [{ "type": "text", "text": "{\"status\":\"queued\"}" }],
"isError": false,
"structuredContent": {
"status": "queued"
}
}
Example: list_integrations
No arguments. Returns two arrays: connected (one row per live connection with sync metadata) and available (catalog apps the user has not connected yet).
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_integrations",
"arguments": {}
}
}
Structured response:
{
"content": [
{
"type": "text",
"text": "{\"connected\":[...],\"available\":[...]}"
}
],
"isError": false,
"structuredContent": {
"connected": [
{
"slug": "github",
"display_name": "GitHub",
"icon_url": null,
"kinds": ["github_repo"],
"items_count": 12,
"last_sync_date": "2026-06-01T10:00:00Z",
"kind": "oauth",
"uid": "42",
"id": null,
"pipedream_account_id": null
}
],
"available": [
{
"slug": "gmail",
"display_name": "Gmail",
"icon_url": null,
"connect_mechanism": "pipedream"
}
]
}
}
Use available[].slug as the app argument to propose_connection. There is no include_all parameter — both lists are always returned.
Agentic query polling
agentic_query may respond immediately or return a pending job:
{
"structuredContent": {
"status": "pending",
"query_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"poll_after_seconds": 5
}
}
Poll with agentic_query_read and the same query_id until status is completed or failed.
Error codes
Machine-readable codes appear in error.data.code:
| Code | Typical HTTP | Meaning |
|---|---|---|
invalid_request |
400 | Malformed JSON-RPC body or unknown tool |
unauthorized |
401 | Missing, invalid, or revoked bearer token |
query_input_invalid |
400 | Tool argument validation failed |
store_payload_rejected |
400 | Store payload too large or invalid |
rate_limit_exceeded |
429 | Hourly rate limit hit; retry after Retry-After |
quota_exceeded |
402 | Insufficient Unabyss credits |
resource_not_found |
404 | Export or query ID not found |
resource_not_ready |
409 | Export not ready for read |
memory_unavailable |
503 | Backend temporarily unavailable |
internal_error |
500 | Unexpected server error |
Rate limits and credits
query,whoami, and read-only tools share query-rate throttles per token.storehas separate hourly and daily write limits.agentic_queryhas a dedicated deep-query hourly cap.- Billable operations consume Unabyss credits according to the account plan.
Support
- Product and token management: app.unabyss.com/mcp
- General inquiries: unabyss.com
- MCP protocol specification: modelcontextprotocol.io