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) | |
|---|---|---|
| Tools | 11 fixed tools for all operations | Only the tools your agent needs |
| Tool names | manage_record | create_invoice, list_payments |
| Agent needs to know | Rekor concepts (collections, records, upsert) | Just the business domain |
| Use case | Setup and administration | Production 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
| Operation | Default name | What it does |
|---|---|---|
create | create_{collection} | Create a record (input schema from collection JSON Schema) |
get | get_{collection} | Get a record by ID |
list | list_{collection} | List records with optional filtering |
update | update_{collection} | Update a record (partial data) |
delete | delete_{collection} | Delete a record |
Relationship tools
| Operation | Default name | What it does |
|---|---|---|
create | link_{rel_type} | Create a relationship between two records |
list | list_{rel_type} | List relationships for a record |
delete | unlink_{rel_type} | Delete a relationship |
Other tools
| Tool | When included | What it does |
|---|---|---|
batch | batch config present | Atomic multi-operation — only allows configured collections and operations |
sql_query | sql_query: true | Read-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.