Militime API

MCP server

Connect AI agents to your Militime data through the Model Context Protocol.

Militime exposes a Model Context Protocol server so AI agents — Claude, Cursor, and any MCP-compatible client — can read and write your organization's data as tools.

Endpoint

https://app.militime.ai/api/mcp

The transport is Streamable HTTP. Authenticate with the same API token as the REST API, sent as a bearer token. The token's scopes apply to every tool.

Connecting

Most clients accept an MCP server configuration like this:

{
  "mcpServers": {
    "militime": {
      "url": "https://app.militime.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer mt_live_your_token"
      }
    }
  }
}

For Claude Code:

claude mcp add --transport http militime https://app.militime.ai/api/mcp \
  --header "Authorization: Bearer mt_live_your_token"

Tools

ToolScopeDescription
whoamiShow the organization and scopes the token is bound to.
list_clientsclients:readList clients.
get_clientclients:readRetrieve a client by id.
create_clientclients:writeCreate a client.
update_clientclients:writeUpdate a client.
delete_clientclients:writeDelete a client (refused if it has projects or time entries).
list_projectsprojects:readList projects.
get_projectprojects:readRetrieve a project by id.
create_projectprojects:writeCreate a project under a client.
update_projectprojects:writeUpdate a project.
delete_projectprojects:writeDelete a project (refused if it has time entries).
list_time_entriestime_entries:readList time entries.
create_time_entrytime_entries:writeLog a time entry.
update_time_entrytime_entries:writeUpdate a time entry.
delete_time_entrytime_entries:writeDelete a time entry.
list_team_membersstaff:readList team members.
list_teamsteams:readList teams.
report_summaryreports:readAggregated time totals + breakdowns.
report_metadatareports:readMetrics/dimensions/filters available to run_report.
run_reportreports:readRun a custom report (metrics × dimensions × filters).

Errors

A tool that fails returns an MCP tool result with isError: true whose text is the same JSON error envelope as the REST API:

{ "error": { "code": "not_found", "message": "No client with id 'cl_x'." } }

Malformed tool arguments (e.g. a missing required field) are rejected by the protocol layer with a standard JSON-RPC -32602 (invalid params) error before the tool runs.

MCP tool calls are subject to the same rate limits and are recorded in your request logs with source = mcp.