Documentation
Connect an AI assistant to Nod
Nod speaks the Model Context Protocol. An assistant can read your projects, versions, comments and decisions, and draft on your behalf. It cannot approve anything, and it cannot download your work.
https://nod.byrewired.com/api/mcp
- Transport
- Streamable HTTP
- Authorization
- OAuth 2.1 + PKCE, or an API key
- Protocol revisions
- 2025-03-26 … 2026-07-28
The endpoint
One URL, over Streamable HTTP. Most apps only ever need this line.
Authorization is discovered from it: the endpoint answers an unauthenticated call with a challenge naming these two documents, and every conforming client follows them without being told.
https://nod.byrewired.com/.well-known/oauth-protected-resource/api/mcp https://nod.byrewired.com/.well-known/oauth-authorization-server
Protocol revisions 2025-03-26 through 2026-07-28 are all served from that one URL. A request that omits the version header is read as 2025-03-26, which is what the specification says to do.
Six apps, six ways
Two of these take the URL and open a browser to ask you for permission. The other four are configured by editing a file, where there is nowhere for a browser to send you back to, so they use an API key instead. Both carry the same permissions.
claude mcp add --transport http --scope user nod https://nod.byrewired.com/api/mcp
https://nod.byrewired.com/api/mcp
https://nod.byrewired.com/api/mcp
{
"mcpServers": {
"nod": {
"url": "https://nod.byrewired.com/api/mcp",
"headers": {
"Authorization": "Bearer nod_sk_your_key_here"
}
}
}
}{
"servers": {
"nod": {
"type": "http",
"url": "https://nod.byrewired.com/api/mcp",
"headers": {
"Authorization": "Bearer nod_sk_your_key_here"
}
}
}
}{
"context_servers": {
"nod": {
"source": "custom",
"url": "https://nod.byrewired.com/api/mcp",
"headers": {
"Authorization": "Bearer nod_sk_your_key_here"
}
}
}
}Make a key in Settings, then AI connections, and paste it in place of the placeholder. A key acts as whoever made it and works until it is revoked, so keep it out of anything you share.
Permissions
Four, and you tick the ones you want when you approve a connection. Read is the only one ticked by default.
nod.read8 toolsRead your projects, assets, comments and decisions
nod_docketnod_list_projectsnod_project_assetsnod_asset_versionsnod_asset_commentsnod_searchnod_contractsnod_retainer_ledger
nod.analytics10 toolsRead throughput, cycle time and gate ageing
nod_analytics_waiting_on_menod_analytics_waiting_on_clientnod_analytics_money_outstandingnod_analytics_money_agreed_vs_billednod_analytics_retainer_burnnod_analytics_approval_turnaroundnod_analytics_overdue_windowsnod_analytics_link_engagementnod_analytics_activity_digestnod_analytics_gate_ageing
nod.comment2 toolsLeave a comment as you
nod_post_commentnod_resolve_comment
nod.export2 toolsStart an export and read its status
nod_start_exportnod_export_status
nod.write22 toolsCreate and edit projects, tasks, scope, invoices, contracts, forms and retainers
nod_create_projectnod_update_projectnod_create_foldernod_rename_foldernod_move_foldernod_upload_assetnod_create_tasknod_update_tasknod_create_baselinenod_add_baseline_linenod_create_change_requestnod_create_invoicenod_add_invoice_linenod_create_contractnod_create_formnod_add_form_fieldnod_book_consumptionnod_price_change_requestnod_update_contract_factsnod_create_sectionnod_open_retainer_periodnod_close_retainer_period
nod.send6 toolsSend what it has drafted to your clients
nod_send_invoicenod_send_contractnod_send_change_requestnod_publish_formnod_assign_formnod_issue_review_link
An assistant that needs more asks again: a tool it cannot reach answers with the exact permission it wants, and the app can send you back to the approval screen for that one thing.
You can always grant less than an app asks for. A connection approved with read only stays read only, whatever the app requested, and nothing about it changes until you approve it again.
What it can do
50 tools, grouped by the permission that unlocks them. Each one runs as the person who approved the connection, under exactly the access they have in the browser, so an assistant can never read a project its owner cannot.
nod.read
nod_docketnod_list_projectsnod_project_assetsproject_idnod_asset_versionsasset_idnod_asset_commentsasset_idnod_searchquerynod_contractsnod_retainer_ledgerretainer_idnod.analytics
nod_analytics_waiting_on_menod_analytics_waiting_on_clientnod_analytics_money_outstandingnod_analytics_money_agreed_vs_billednod_analytics_retainer_burnnod_analytics_approval_turnaroundnod_analytics_overdue_windowsnod_analytics_link_engagementnod_analytics_activity_digestnod_analytics_gate_ageingnod.comment
nod_post_commentasset_id, bodynod_resolve_commentcomment_idnod.export
nod_start_exportproject_idnod_export_statusjob_idnod.write
nod_create_projectnamenod_update_projectproject_idnod_create_folderproject_id, namenod_rename_folderfolder_id, namenod_move_folderfolder_idnod_upload_assetnod_create_taskproject_id, namenod_update_tasktask_idnod_create_baselineproject_idnod_add_baseline_linebaseline_id, titlenod_create_change_requestproject_id, title, body_mdnod_create_invoicecurrencynod_add_invoice_lineinvoice_id, description, unit_pricenod_create_contracttitle, body_mdnod_create_formtitlenod_add_form_fieldform_id, type, labelnod_book_consumptionretainer_id, quantitynod_price_change_requestchange_request_id, amount, currency_codenod_update_contract_factscontract_idnod_create_sectionproject_id, namenod_open_retainer_periodretainer_idnod_close_retainer_periodperiod_idnod.send
nod_send_invoiceinvoice_idnod_send_contractcontract_idnod_send_change_requestchange_request_idnod_publish_formform_idnod_assign_formform_id, user_idsnod_issue_review_linkgate_id, asset_idThe names beside a tool are the arguments it insists on. Everything else it takes is optional and has a sensible default.
What it can read
Context an assistant can attach once instead of fetching every turn. Useful when a conversation is about one project for an hour.
nod://project/{project_id}application/jsonnod://project/{project_id}/docketapplication/jsonnod://asset/{asset_id}/versionsapplication/jsonnod://contract/{contract_id}text/plainnod://retainer/{retainer_id}/ledgerapplication/jsonReady-made prompts
Three jobs an account manager does every week, with the context already gathered. Each one ends in a draft for a person to send, never in a decision.
chase_the_gate(project_id)client_round_up(project_id, since, locale)scope_check(project_id, request)What it can never do
Not settings, and not a plan. There is no tool for any of these at any permission level, which is why the permission list has only four entries.
- Approve, reject, sign or accept. There is no tool for it at any permission level, and there will not be: an approval is a recorded decision by a named person, and in this market it is increasingly the document that triggers payment. An assistant can read the whole thread and draft the reply. A person presses the button.
- Return your work. No tool, resource or prompt hands back a frame, a render or a file. Delivery stays behind the watermarking and expiring links the product already uses.
- See past the person who approved it. Every query runs as that account under the same rules the browser enforces, so an assistant connected by a client sees a client's view, not the agency's.
- Send anything to anyone. It cannot issue a review link, invite a person, email a client or change who can see a project. Reaching outside the workspace stays a decision somebody makes in the product.
Limits, the record, and cutting it off
120 calls a minute per connection, counted centrally rather than per server, so the limit is the limit. Past it, calls come back as 429 and the assistant waits.
Every call is recorded with the tool it used, the account it acted as, whether it succeeded and how long it took. Workspace admins can read their own workspace's log; support staff cannot, because tool arguments carry project and asset names.
Disconnecting is immediate. Revoking a connection invalidates every token issued under it in the same statement, so there is no hour-long window where an assistant keeps working.
Access tokens are short lived and refreshed in the background. A refresh token is single use: presenting one twice means two parties hold it, so the whole connection is revoked rather than the second attempt refused.
When it does not connect
Four failures cover almost all of it, and each one names itself in the response.
401 invalid_tokeninvalid_targetnod_sk_your_key_here429Anything else, open Settings, then AI connections. Every call the workspace has made is there with its outcome, which is usually enough to see what the app is actually asking for.