POST
/mcp-keys
Create an MCP API key
Creates a project-scoped MCP key for a specific agent role. Requires a valid user JWT and Owner or Admin membership in the project's space. The full key is returned once only.
Headers
Authorization: Bearer <user-jwt> X-Tenant-ID: <tenant-id>
Body
{
"projectId": 1,
"role": "planner", // or "implementor"
"name": "Planning Agent v1"
}
Roles
| Role | Tools available |
|---|---|
planner | list_tasks, get_task, list_columns, list_epics, list_priorities, create_epic, create_task, plan_epic, replan_epic, remove_tasks |
implementor | list_tasks, get_task, list_columns, list_epics, list_priorities, fetch_next_task, accept_task, action_task |
Key management
GET /mcp-keys?projectId=X — list keys (no secret shown). DELETE /mcp-keys/:id — soft-revoke.
POST
/mcp
MCP endpoint
Stateless Streamable HTTP MCP transport. Each request is authenticated via the MCP key — no user JWT required.
Headers
Authorization: Bearer ttf_<your-mcp-key> X-Tenant-ID: <tenant-id> Content-Type: application/json
Initialize
{
"jsonrpc": "2.0", "id": 1, "method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "my-agent", "version": "1.0" }
}
}
Planner tools
| Tool | Description |
|---|---|
create_epic | Create an epic in the project |
create_task | Create a single task |
plan_epic | Create an epic and tasks atomically |
replan_epic | Remove removable tasks from an epic and replace them with a new plan |
remove_tasks | Surgically remove specific tasks (skips in-progress/done) |
Implementor tools
| Tool | Description |
|---|---|
fetch_next_task | Returns the agent's own in-progress work first, then the next unassigned To Do task |
accept_task | Assigns a task to the calling agent (creates a virtual space member if needed) |
action_task | Moves a task to a different workflow column |