developer portal

MCP Server

Sign in with your GeoDynamics account (accounts.geodynamics.eu) the first time your client connects. Every tool call is then scoped to the company you picked, and tools never take a companyId parameter. Superadmin accounts are refused here, they belong on the Admin MCP.

The Model Context Protocol server puts your own GeoDynamics data in front of an AI tool: people, clockings, timesheet totals, vehicles, and geofenced sites. Point a client at the transport URL below and the five tools appear in its tool list.

Every tool is annotated read-only. There are no write tools on this server: no clocking inserts, no timesheet approvals, no configuration changes. Reports as structured JSON are planned separately and will stay read-only as well.

Connect your client

One transport URL serves every client: https://mcp.geodynamics.dev/mcp. Clients that speak remote MCP take it directly. Clients that only spawn a local process reach it through the mcp-remote bridge.

Claude Desktop

Add a remote server entry that points at the hosted URL. Claude opens the GeoDynamics login in your browser the first time you connect.

jsonclaude_desktop_config.json
{
  "mcpServers": {
    "geodynamics": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.geodynamics.dev/mcp"
      ]
    }
  }
}

Cursor

Create or edit .cursor/mcp.json in your project, or the global Cursor MCP config, with the same remote URL.

jsonmcp.json
{
  "mcpServers": {
    "geodynamics": {
      "url": "https://mcp.geodynamics.dev/mcp"
    }
  }
}

Any other client

Anything that can spawn a local stdio bridge reaches the same URL throughmcp-remote.

shellconnect.sh
npx -y mcp-remote https://mcp.geodynamics.dev/mcp

Tools

Five tools, all reads. Company scope comes from the auth session, so no tool takes a company parameter. Ids that one tool returns are the ids the next one accepts.

TOOLlistUsersread-only

List users

People in your company. Start here: the id it returns is theuserId that getClockings andgetTimesheetSummary take.

Input

NameTypeRequiredNotes
searchstringoptionalFilter by name fragment.

Returns

One row per user with id, name, code, and dayProgramId.

TOOLgetClockingsread-only

Get clockings

Clock-in and clock-out events over a date range. Raw events, so usegetTimesheetSummary when you need hours someone can sign off on.

Input

NameTypeRequiredNotes
fromstringrequiredStart of the range, ISO 8601. 2025-03-01T00:00:00Z
tostringrequiredEnd of the range, ISO 8601. Max 31 days.
userIduuidoptionalOne person, from listUsers.

Returns

A total and the matching items, oldest first.

TOOLgetTimesheetSummaryread-only

Get timesheet summary

Worked hours for one person over a period, straight from the post-calculation engine. These totals are the authoritative ones. Summing raw clockings yourself gives a different, wrong answer.

Input

NameTypeRequiredNotes
userIduuidrequiredFrom listUsers.
fromstringrequiredStart date, YYYY-MM-DD.
tostringrequiredEnd date, YYYY-MM-DD. Max 31 days from the start.

Returns

Period totals per day type, as the timesheet reports them.

TOOLlistVehiclesread-only

List vehicles

Vehicles in your company that carry a tracking device.

Input

NameTypeRequiredNotes
searchstringoptionalFilter by name, such as truck or van 12.

Returns

One row per vehicle with id, name, and code.

TOOLlistPOIsread-only

List POIs

Geofenced locations: work sites, offices, and depots. These are the places clockings and vehicle movements are matched against.

Input

NameTypeRequiredNotes
searchstringoptionalFilter by name.

Returns

One row per location with its name and identifiers.

Example prompts

Once the client is connected, ask it things like:

Discovery

Agents that would rather not read this page can fetch the MCP Server Card athttps://build.geodynamics.eu/.well-known/mcp/server-card.json. It names the transport, the OAuth endpoints, and the same five tools.