Tempo time-tracking for Claude — worklogs, plans, and timesheet approvals
Runs on your machine from its package; the steps are below.
At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y tempo-api-mcp
MCP client config
{
"mcpServers": {
"tempo": {
"command": "npx",
"args": [
"-y",
"tempo-api-mcp"
]
}
}
}Tempo API MCP server for Claude — developed and maintained by AI (Claude Code)
Every write (create/update/delete, and the timesheet submit/approve/reject/reopen/recall actions) asks the user to confirm before it changes anything: a confirmation prompt where the client supports one; otherwise the first call returns a preview of exactly what would be sent plus a confirmToken, and only a repeat call with that token proceeds.
| variable | default | |
|---|---|---|
MCP_CONFIRM_MODE | ask-user | What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) gets the real prompt unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse. |
MCP_CONFIRM_ELICITATION | on | off never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE two-step flow. Set it for opencode v2: it claims to support prompts but never displays them, so writes (including timesheet approvals) hang. Any other value stays on. |
MCP_CONFIRM_TTL_SECONDS | 600 | How long a token stays valid. |
MCP_CONFIRM_SECRET | random per process | Signing key; set it only if tokens must survive a server restart. |
In opencode, set it in the server's environment block:
{
"mcp": {
"servers": {
"tempo": {
"type": "local",
"command": ["npx", "-y", "tempo-api-mcp"],
"environment": { "TEMPO_API_TOKEN": "…", "MCP_CONFIRM_ELICITATION": "off" }
}
}
}
}