MCP Factory

MCP Factory lets you create custom, domain-specific MCP servers from your workspace collections. Instead of generic tools like manage_record, your agents see purpose-built tools like create_invoice, list_payments, and link_invoice_payment.

Why MCP Factory?

Admin MCP (generic)MCP Factory (custom)
Tools11 fixed tools for all operationsOnly the tools your agent needs
Tool namesmanage_recordcreate_invoice, list_payments
Agent needs to knowRekor concepts (collections, records, upsert)Just the business domain
Use caseSetup and administrationProduction agents doing domain-specific work

Creating an Endpoint

Each endpoint defines which collections, operations, relationships, and capabilities to expose. Create endpoints in a preview workspace, then promote to production.

Quick: shorthand flags

rekor endpoints upsert invoicing-agent --workspace my-ws \
  --name "Invoicing Agent" \
  --tool "invoices:get,list" \
  --tool "payments:create,get,list" \
  --relationship "invoice_payment:create,list" \
  --batch "invoices:create,update" --batch "payments:create" \
  --sql-query

Advanced: full JSON config

Use --config for custom tool names and descriptions:

rekor endpoints upsert invoicing-agent --workspace my-ws \
  --config '{
    "name": "Invoicing Agent",
    "description": "Tools for managing invoices and payments",
    "tools": [
      {
        "collection": "invoices",
        "operations": ["get", "list"],
        "name_override": "search_invoices",
        "description_override": "Search invoices by customer, status, or date range"
      },
      {
        "collection": "payments",
        "operations": ["create", "get", "list"],
        "description_override": "Manage payment records"
      }
    ],
    "relationships": [
      {
        "rel_type": "invoice_payment",
        "operations": ["create", "list"],
        "name_override": "assign_payment",
        "description_override": "Link a payment to an invoice"
      }
    ],
    "batch": {
      "enabled": true,
      "operations": {
        "invoices": ["create", "update"],
        "payments": ["create"],
        "invoice_payment": ["create"]
      }
    },
    "sql_query": true
  }'

Or load from a file: --config @endpoint.json

Connecting an Agent

Get the MCP connection URL, then point any MCP client at it:

rekor endpoints url invoicing-agent
# → https://mcp.rekor.pro/e/invoicing-agent/mcp
{
  "mcpServers": {
    "invoicing": {
      "url": "https://mcp.rekor.pro/e/invoicing-agent/mcp",
      "headers": {
        "Authorization": "Bearer rec_your_token_here"
      }
    }
  }
}

Important: The token must be scoped to exactly one workspace. Multi-workspace or wildcard tokens are rejected.

Generated Tools

Based on the endpoint config, the following tools are generated:

Collection tools

OperationDefault nameWhat it does
createcreate_{collection}Create a record (input schema from collection JSON Schema)
getget_{collection}Get a record by ID
listlist_{collection}List records with optional filtering
updateupdate_{collection}Update a record (partial data)
deletedelete_{collection}Delete a record

Relationship tools

OperationDefault nameWhat it does
createlink_{rel_type}Create a relationship between two records
listlist_{rel_type}List relationships for a record
deleteunlink_{rel_type}Delete a relationship

Other tools

ToolWhen includedWhat it does
batchbatch config presentAtomic multi-operation — only allows configured collections and operations
sql_querysql_query: trueRead-only SQL queries scoped to the endpoint's collections

Customizing Tools

Use name_override and description_override on any tool to control exactly what the agent sees:

{
  "collection": "invoices",
  "operations": ["list"],
  "name_override": "search_invoices",
  "description_override": "Search invoices by customer name, status, date range, or amount"
}

Without overrides, tools get sensible defaults: create_invoices, get_invoices, etc. The tool description includes the collection's JSON Schema so agents know the expected data shape.

Batch-Only Patterns

You can expose operations only through batch, not as standalone tools. For example, invoices that must always be created atomically with their line items:

{
  "tools": [
    { "collection": "invoices", "operations": ["get", "list"] },
    { "collection": "line_items", "operations": ["get", "list"] }
  ],
  "batch": {
    "enabled": true,
    "operations": {
      "invoices": ["create", "update"],
      "line_items": ["create"],
      "invoice_line_item": ["create"]
    }
  }
}

No standalone create_invoices — the agent must use the batch tool, ensuring invoices and line items are always created atomically.

Managing Endpoints

# List all endpoints
rekor endpoints list --workspace my-ws

# Get endpoint details
rekor endpoints get invoicing-agent --workspace my-ws

# Get with resolved collection schemas
rekor endpoints get invoicing-agent --workspace my-ws --resolved

# Delete an endpoint
rekor endpoints delete invoicing-agent --workspace my-ws

Endpoints are workspace config — they can only be created or modified in preview workspaces. Promote to production when ready, just like collections, hooks, and triggers.

MCP Factory — Rekor