Documentation
Connect your agent
Nodeon exposes an MCP server at /api/mcp. Your coding agent connects to it and pulls task context on demand, node by node, in dependency order.
Quick start
The simplest way to connect, paste the URL into your agent's MCP config. Authentication happens automatically via OAuth when your agent first connects.
Claude Code
claude mcp add --transport http --scope user nodeon https://www.nodeon.app/api/mcpCursor
Create or edit .cursor/mcp.json:
{
"mcpServers": {
"nodeon": {
"url": "https://www.nodeon.app/api/mcp"
}
}
}Codex (OpenAI)
{
"mcpServers": {
"nodeon": {
"url": "https://www.nodeon.app/api/mcp"
}
}
}Windsurf
{
"mcpServers": {
"nodeon": {
"url": "https://www.nodeon.app/api/mcp"
}
}
}How OAuth works
Nodeon implements the MCP authorization specification (OAuth 2.1 with PKCE). The flow is:
- Your agent sends a request to
/api/mcpwithout a token. - The server responds with
401 Unauthorizedand aWWW-Authenticateheader pointing to the resource metadata. - Your agent discovers the authorization server at
/.well-known/oauth-protected-resourceand/.well-known/oauth-authorization-server. - Your agent dynamically registers itself (
POST /oauth/register), no manual setup needed. - A browser window opens for you to sign in and authorize access.
- Your agent exchanges the authorization code for tokens (
POST /oauth/token) using PKCE. - Access tokens are JWTs with audience binding. Refresh tokens rotate automatically.
Endpoints
GET /.well-known/oauth-protected-resourceProtected Resource Metadata (RFC 9728)GET /.well-known/oauth-authorization-serverAuthorization Server Metadata (RFC 8414)POST /oauth/register: Dynamic Client Registration (RFC 7591)GET /oauth/authorize: Authorization endpoint (PKCE, S256)POST /oauth/token: Token endpoint (authorization_code + refresh_token grants)
Available tools
Once connected, your agent can call these tools:
list_projects: list your projectsget_next_task: get the next unblocked node with its scoped contextmark_task_complete: mark a node as doneadd_subtask: add a discovered task to the graphadd_dependency: connect two nodes with a dependencyflag_blocker: flag a node as blocked with a reason
How the MCP connection works
Nodeon uses the Streamable HTTP transport. Every request is a JSON-RPC 2.0 message sent as an HTTP POST to /api/mcp. The server is stateless, no session tracking, no WebSocket, no SSE stream to maintain.
Each request carries its own OAuth token and protocol version. If the server restarts, the next request works without reconnection.
Typical workflow
- Your agent calls
list_projectsto see what's available. - It calls
get_next_taskwith a project ID. Nodeon returns the highest-priority unblocked node, along with its dependencies, dependents, and full spec. - The agent builds that task.
- It calls
mark_task_completeto update the graph. - It calls
get_next_taskagain. The next unblocked node is now returned. - If the agent discovers new work, it calls
add_subtask. If it hits a wall, it callsflag_blocker.
Repeat until all nodes are done or blocked.
Local development
If you're running Nodeon locally (npm run dev), use http://localhost:3000/api/mcp as the URL. OAuth works over localhost without HTTPS.
claude mcp add --transport http --scope user nodeon http://localhost:3000/api/mcpTroubleshooting
401 Unauthorized
Your token is missing, expired, or wrong. Your agent should handle re-authentication automatically through OAuth. If the error persists, remove the Nodeon MCP server from your client and add it again.
Connection refused
Check that the URL is correct and the server is running. For local development, make sure npm run dev is running.
Tools not appearing
Some agents cache the tool list. Restart the agent or clear its MCP cache. In Claude Code, run claude mcp reset.
Graph contains a cycle
If get_next_task returns a cycle error, your dependency graph has a loop. Open the canvas and remove the circular edge.