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/mcpThe 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
| Tool | Scope | Description |
|---|---|---|
whoami | — | Show the organization and scopes the token is bound to. |
list_clients | clients:read | List clients. |
get_client | clients:read | Retrieve a client by id. |
create_client | clients:write | Create a client. |
update_client | clients:write | Update a client. |
delete_client | clients:write | Delete a client (refused if it has projects or time entries). |
list_projects | projects:read | List projects. |
get_project | projects:read | Retrieve a project by id. |
create_project | projects:write | Create a project under a client. |
update_project | projects:write | Update a project. |
delete_project | projects:write | Delete a project (refused if it has time entries). |
list_time_entries | time_entries:read | List time entries. |
create_time_entry | time_entries:write | Log a time entry. |
update_time_entry | time_entries:write | Update a time entry. |
delete_time_entry | time_entries:write | Delete a time entry. |
list_team_members | staff:read | List team members. |
list_teams | teams:read | List teams. |
report_summary | reports:read | Aggregated time totals + breakdowns. |
report_metadata | reports:read | Metrics/dimensions/filters available to run_report. |
run_report | reports:read | Run 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.