Eodly MCP server setup for Claude and Cursor
Eodly ships an MCP server, so an agent can read your end-of-day reports and roster as tools rather than by scraping a dashboard. Ask Claude "who is slipping this week?" and it pulls the sourced answer from your workspace.
It is read-only. Nothing exposed here can change anything in Eodly.
Before you start: get an API key
Every connection needs an organization-scoped key. In Eodly, open Settings, then the Developer tab, and create a key under API keys for agents. Pick the scopes you want the agent to have:
reports:readfor the end-of-day reports.team:readfor the roster.
Keys look like eodly_sk_..., are scoped to one organization, and can be revoked from the same screen at any time.
Option 1: the hosted server (nothing to install)
Point your client at the remote endpoint:
https://eodly.io/api/mcp
It speaks MCP over Streamable HTTP. Authenticate with the key as a bearer token, Authorization: Bearer eodly_sk_....
This is the one to prefer. There is nothing to install, and it always runs the current version.
Option 2: the npm package (local, stdio)
If your client expects a local stdio server, use the published package:
npx -y @eodly/mcp
It needs EODLY_API_KEY in the environment. The package is @eodly/mcp on npm, and the source is public at layergen/eodly-mcp.
Claude Desktop
Add this to claude_desktop_config.json:
{
"mcpServers": {
"eodly": {
"command": "npx",
"args": ["-y", "@eodly/mcp"],
"env": { "EODLY_API_KEY": "eodly_sk_..." }
}
}
}
Cursor and most other MCP clients take the same shape. Restart the client after editing the config.
The tools
| Tool | What it returns | Scope needed |
|---|---|---|
whoami |
Which organization the key belongs to and what scopes it holds | none |
list_reports |
Recent end-of-day report summaries, most recent first | reports:read |
get_report |
One full report by id: shipped, silent, slipping, blockers | reports:read |
list_team |
The roster: names, roles, departments | team:read |
list_reports and get_report also render an interactive report card in clients that support MCP Apps, rather than returning a wall of JSON. The view is served as a ui://eodly/report.html resource and is self-contained, with no network access of its own.
Checking it works
Run whoami first. It needs no scope, so it tells you whether the key itself is good before you debug anything else. A healthy response names your organization and lists the scopes on the key.
If your client can read a machine-readable description instead, the server card at /.well-known/mcp/server-card.json carries the transport, protocol versions, authentication and the full tool list.
Troubleshooting
A GET to https://eodly.io/api/mcp returns 405. That is expected, not a fault. The endpoint speaks JSON-RPC over POST, and Streamable HTTP reserves GET for a server-initiated event stream that this server does not offer. Point an MCP client at it rather than a browser, or read the server card if you just want to see what it supports.
401 on every call. The key is missing, mistyped, or revoked. Create a fresh one under Settings, then Developer.
403 on list_reports or list_team. The key is valid but lacks that scope. Scopes are fixed when the key is created, so make a new key with the scope you need.
The agent sees no tools. Check the client actually restarted after the config change, and that EODLY_API_KEY is set in the environment the client launches, not just your shell.
Next
- Eodly API and developer documentation for the REST API and the OpenAPI spec
- Getting started with Eodly
- Troubleshooting