Model Context Protocol

Your tracker, as a native MCP server

Nine tools, project and TQL resources, five prompts and resumable streaming — served from /api/mcp inside the Trakr you host. Claude Desktop, Claude Code, Cursor and any other MCP host can drive it directly.

Tools

Nine, fully schema'd

  • Search, get, list, create, update
  • Transition, comment, log work, stats
  • Input and output schemas published
  • readOnlyHint on the read-only ones
  • Business failures return isError, not a protocol error
Resources & prompts

Context the host can pull

  • trakr://projects and trakr://stats
  • trakr://guide/tql — a full TQL reference
  • One resource per project
  • Five URI templates for project, ticket, comments, activity and search
  • Five prompts: triage, file a bug, standup, project health, write TQL
The boundary

Scope comes from the key

  • Per-organisation API keys
  • Organisation is never a tool argument
  • Project keys verified against the caller's org
  • Keys stored as SHA-256, revealed once
  • Revocable at any time
Tool
MCP What it does Called by the host
readOnlyHint Declared in the schema
trakr_search_tickets
Runs a TQL query and returns matching tickets — 50 results by default, 200 maximum
Yes
trakr_get_ticket
Fetches one ticket in full by its key
Yes
trakr_list_projects
Lists the projects visible to the calling organisation
Yes
trakr_create_ticket
Files a new ticket in a project — and goes through the same assignment routing as every other filing path
Write
trakr_update_ticket
Updates fields on an existing ticket
Write
trakr_transition_ticket
Moves a ticket through the project's own workflow — the workflow engine still decides what is legal
Write
trakr_add_comment
Appends a comment to a ticket's thread
Write
trakr_log_work
Records a work log against a ticket, in the same store the timesheets read from
Write
trakr_get_stats
Returns statistics for the organisation — the numbers behind "how are we doing?"
Yes
Legend Read-only, hinted as such Mutating — hosts can require confirmation
01 / Sovereignty

The model talks to your server, not a vendor's

Trakr is self-hosted, so the MCP endpoint is on your hostname, inside your network, behind your controls. A host you run connects to a server you run. There is no intermediary tenant, no shared control plane and no third party in the data path who has to be added to a processor register.

Pair it with a local model and the whole loop — host, model and system of record — is inside the building.

02 / Schemas

Output schemas, not just input schemas

Most tool servers describe what to send and leave the response as free text. Trakr publishes both directions, so a host can validate what comes back and a model has a stable shape to reason about rather than a paragraph to parse.

Business failures come back as isError results rather than protocol errors — "that transition is not allowed" is an answer, not a broken connection.

03 / Live context

Notifications fire after the write commits

A host can subscribe to a resource URI and receive a notifications/resources/updated message when the underlying ticket changes — pushed after the write commits, not when it is attempted, and fanned out to that ticket's comments and activity resources.

The transport is streamable HTTP with SSE. Sessions are created on initialize and resume via Last-Event-ID against a 64-event replay buffer, with keepalives and a cap of 500 concurrent sessions per node. Every list is cursor-paginated, and completion is offered for project and ticket keys.

04 / Scope

The key decides the organisation. Full stop.

API keys are issued per organisation. The organisation scope is read from the key and never from a tool argument, so no amount of prompt engineering persuades a model into another tenant's data, and project keys are verified to belong to the caller's organisation before anything is returned.

Keys are stored as SHA-256 hashes, shown in plaintext exactly once at creation, and revocable. Losing one is an operational inconvenience, not a data breach with an unknown blast radius.

A typical MCP host configuration

The endpoint is /api/mcp on your own deployment. Replace the hostname with yours and the key with the one revealed when you created it — Trakr keeps only a SHA-256 hash, so there is no second chance to read it.

{
  "mcpServers": {
    "trakr": {
      "type": "http",
      "url": "https://trakr.internal.example.eu/api/mcp",
      "headers": {
        "Authorization": "Bearer <your-organisation-api-key>"
      }
    }
  }
}
  1. Create a per-organisation API key. The plaintext is shown once; Trakr stores a SHA-256 hash. Revoke it whenever you like.
  2. Point the host at /api/mcp. Claude Desktop, Claude Code, Cursor and any other MCP host all speak the same protocol.
  3. Negotiate a version. Trakr supports 2024-11-05, 2025-03-26 (the default), 2025-06-18 and 2025-11-25, and advertises tools, resources with subscribe and listChanged, prompts and completions.
  4. Read trakr://guide/tql first. It is the full TQL reference in Markdown, which is what turns "find stale bugs in payments" into a query that actually runs.
  5. Subscribe to what you care about. Per-URI subscriptions push an update after each ticket write commits, including to that ticket's comments and activity resources.

Resources & prompts

Context a host can pull without calling a tool
  • Project index trakr://projects
  • Organisation statistics trakr://stats
  • Full TQL reference trakr://guide/tql
  • Per project One resource each
  • Template trakr://project/{key}
  • Template trakr://ticket/{key}
  • Template trakr://ticket/{key}/comments
  • Template trakr://ticket/{key}/activity
  • Template trakr://search/{tql}
  • Prompts triage_ticket · file_bug · standup · project_health · write_tql
The standup prompt answers "what did I do?"
Over the last seven days by default. write_tql ships with the language reference embedded, so the model is not guessing at syntax it has never seen.

Transport & auth

The operational envelope
  • Endpoint /api/mcp
  • Protocol versions Four supported
  • Default version 2025-03-26
  • Transport Streamable HTTP + SSE
  • Session created on initialize
  • Resumable via Last-Event-ID
  • Replay buffer 64 events
  • Concurrent sessions 500 per node
  • Search results 50 default · 200 max
  • Completion values 100 max, with hasMore
Completion is deliberately narrow.
It completes project and ticket keys only, scoped to the organisation. Autocomplete is not a data-export channel.
What is MCP, and why does it matter that Trakr has its own server?

The Model Context Protocol is a standard way for an AI host to discover and call tools, read resources and use prompts. Because Trakr ships a server at /api/mcp, hosts such as Claude Desktop, Claude Code and Cursor can search, read, create, update, transition, comment on and log work against tickets directly — no bespoke integration, no wrapper around the REST API that drifts out of date.

And because Trakr is self-hosted, the host connects to your server rather than to a vendor's. The system of record never leaves your infrastructure to make the integration work.

Which protocol versions are supported?

Four: 2024-11-05, 2025-03-26 which is the default, 2025-06-18 and 2025-11-25. The server advertises tools, resources with subscribe and listChanged, prompts and completions.

What can a connected model actually do?

Nine tools: search tickets with TQL, get a ticket, list projects, create a ticket, update a ticket, transition a ticket, add a comment, log work and get statistics.

Every tool publishes both an input and an output schema, and the read-only ones carry readOnlyHint, so a host can distinguish a query from a write and apply its own confirmation policy. Business failures return isError rather than a protocol error.

How is access scoped and secured?

Through per-organisation API keys. The organisation scope comes only from the key and never from a tool argument, so a model cannot reach another organisation's data by passing a different identifier, and project keys are verified to belong to the caller's organisation.

Keys are stored as SHA-256 hashes, revealed in plaintext exactly once at creation, and can be revoked at any time.

Does the connection survive a dropped network?

Yes. The transport is streamable HTTP with server-sent events. Sessions are created on initialize and resume via Last-Event-ID against a 64-event replay buffer, with keepalives and a cap of 500 concurrent sessions per node. Every list endpoint is cursor-paginated.

Does the model see ticket changes as they happen?

Yes, if it subscribes. Resource subscriptions work per URI, and a notifications/resources/updated message is pushed after a ticket write commits — not when it is merely attempted — fanning out to that ticket's comments and activity resources as well.

Give your assistant a real system of record

Nine tools, five prompts, a TQL reference it can read, and an API key that decides exactly what it can see. Self-hosted. Made in Belgium.