MCP Tools

Rekor offers two MCP interfaces for different stages of the agent lifecycle:

InterfaceFor whomWhat it doesEndpoint
Admin MCPAgent builders11 generic tools for setup: create workspaces, define schemas, manage hooks/triggers, configure endpointsmcp.rekor.pro/mcp
MCP FactorySpecialized agentsCustom, domain-specific tools generated from your collection schemas (e.g., create_invoice, list_payments)mcp.rekor.pro/e/{slug}/mcp

Use the Admin MCP to build your data model. Use MCP Factory endpoints to let production agents use it — with tools tailored to their specific domain.

Admin MCP

Eleven tools that give AI agents full CRUD over workspaces, collections, records, relationships, files, and integrations. Each tool supports multiple actions via an action parameter — one tool per domain, not one tool per operation.

Connecting an Agent

Point any MCP-compatible client at Rekor's MCP server.

Claude Desktop / Claude Code

Add this to your MCP config:

{
  "mcpServers": {
    "rekor": {
      "url": "https://mcp.rekor.pro/mcp",
      "headers": {
        "Authorization": "Bearer rec_your_token_here"
      }
    }
  }
}

Any MCP Client

The MCP server endpoint is https://mcp.rekor.pro/mcp. SSE transport is available at /sse. Pass a Bearer token for authentication.

Discovery Pattern

Agents should always start with manage_workspace(list) to discover available workspaces, then manage_collection(list) to see what data types exist. This gives the agent full context before it starts reading or writing.

// Step 1: What workspaces exist?
manage_workspace({ action: "list" })

// Step 2: What collections does this workspace have?
manage_collection({ action: "list", workspace_id: "crm" })

// Step 3: Read or write records
sql_query({ workspace_id: "crm", query: "SELECT * FROM records FINAL WHERE workspace_id = {workspace_id:String} AND collection = 'contacts' AND deleted = false LIMIT 10" })

Common Workflows

CRUD a record

// Create or update
manage_record({ action: "upsert", workspace_id: "crm", collection: "contacts",
  external_id: "c_001", external_source: "crm",
  data: { name: "Jane Doe", email: "jane@acme.com" } })

// Read
manage_record({ action: "get", workspace_id: "crm", collection: "contacts", id: "..." })

// Delete
manage_record({ action: "delete", workspace_id: "crm", collection: "contacts", id: "..." })

Query with SQL

// Filter + sort
sql_query({ workspace_id: "crm",
  query: "SELECT data.title.:String as deal, CAST(data.value, 'Float64') as value FROM records FINAL WHERE workspace_id = {workspace_id:String} AND collection = 'deals' AND data.stage.:String = 'negotiation' AND deleted = false ORDER BY value DESC LIMIT 20" })

// Aggregate
sql_query({ workspace_id: "crm",
  query: "SELECT data.stage.:String as stage, sum(CAST(data.value, 'Float64')) as pipeline FROM records FINAL WHERE workspace_id = {workspace_id:String} AND collection = 'deals' AND deleted = false GROUP BY stage" })

Link records with relationships

// Create a relationship
manage_relationship({ action: "upsert", workspace_id: "crm",
  rel_type: "owns", source_collection: "contacts", source_id: "c_001",
  target_collection: "deals", target_id: "d_001" })

// Traverse
query_relationships({ workspace_id: "crm", collection: "contacts",
  record_id: "c_001", rel_type: "owns", direction: "outgoing" })

Available Tools

ToolDescription
batch_operationsExecute multiple record, relationship, and collection operations atomically. All operations succeed or all fail. Use for transactions, multi-entity writes, or any case where consistency between operations is required. Max 1,000 operations.
manage_attachmentManage file attachments on records. Filenames can include paths for folder structure (e.g. 'docs/guide.md', 'src/index.ts'). Upload returns a presigned URL — the agent uploads bytes directly.
manage_collectionManage collection schemas. Actions: upsert, get, list, delete. Use list to discover what collections exist in a workspace.
manage_hookManage inbound webhook endpoints. Hooks accept Record-format JSON and upsert through the normal write path.
manage_recordCreate, read, update, delete, or cancel individual records. Uses PUT for upsert. Supply external_id (and optional external_source) for idempotent writes from external systems — the internal UUID is auto-generated. Use record_id (internal UUID) for get/delete/cancel or to update a known record. Records may be archived (_archived: true in response) — archived records are read-only and cannot be upserted, but can be cancelled or deleted.
manage_relationshipCreate, read, update, or delete relationships between records. Relationships are typed, directed links with optional metadata.
manage_triggerManage outbound triggers. Triggers fire HTTP POST to a URL when records or relationships change.
manage_workspaceManage workspaces. Actions: create, get, list, delete, create_preview, list_previews. Start here to discover existing workspaces before operating. Note: schema changes (collections, triggers, hooks) can only be made in preview workspaces. Use create_preview to create a preview from a production workspace, then promote via CLI.
provider_adapterConvert between LLM provider tool formats (openai, anthropic, google, mcp) and Record collections. Actions: import_tools (create collections from tool definitions), export_tools (export collections as tool definitions), import_tool_call (create a record from a tool call in provider format).
query_relationshipsQuery relationships for a specific record. Find related records by type and direction.
sql_queryExecute a read-only SQL query against workspace data. Tables: records, relationships, collections, workspaces, operations_log. Always include workspace_id = {workspace_id:String} and deleted = false in WHERE. Use FINAL after table name.

MCP Factory

For production agents that need domain-specific tools instead of generic CRUD, see MCP Factory. Create custom MCP endpoints where agents see create_invoice and list_payments — not manage_record.

MCP Tools — Rekor