payments_charges, and
payments_refund, which refunds a member payment. They run the same operation
and read under the same token rules, money-movement opt-in, rate limits and
activity log. A write tool among them takes a _requestId that you reuse only
to retry, and an error comes back as a message with isError: true.
Connect from ChatGPT or Claude
ChatGPT and Claude can’t paste a token; they sign in with OAuth. Add Dueflow as a custom connector (MCP server) with the URL above and choose OAuth if you are asked. The client discovers everything else from the server.1
Sign in to Dueflow
You are sent to
dueflow.co to sign in with your usual account. Nothing
is shared with the assistant until you approve the next screen.2
Approve the connection
Pick the organization the assistant may act in and tick the scopes it may
use. Scopes your role can’t hold, or that the organization has
blocked, are shown but can’t be
granted. Decline and the assistant gets nothing.
3
Ask away
The assistant now holds a short-lived access token (one hour) and a
refresh token it renews silently. Every change it makes appears in the
organization’s API activity log, attributed to you via the app; its calls
to REST-backed tools are counted in API usage.
A connection acts as you, with personal-token semantics: change roles and it
narrows the same minute, leave the organization and it stops working. Scopes
are re-evaluated every time the token is refreshed, so a connection can lose
scopes over time but never gain them.
Connect with a bearer token
Clients that can send a header – Claude Code, Cursor, scripts, anything headless – skip OAuth and use a personal or service token directly:dfs_ token in a header, as it
would for REST.
Tools
tools/list returns one tool per operation or read the token is allowed to
call, named after it with the dot replaced by an underscore – GET /v1/members
is members_list, PATCH /v1/members/{memberId} is members_update. An
operation with several endpoints is one tool with a _route argument
(cards_setFrozen covers freeze and unfreeze). Path parameters, query
parameters and body fields are all arguments of the tool; the input schema is
the endpoint’s, so the reference page for an endpoint documents its tool too.
Tools the token’s scopes can’t call are omitted rather than listed and refused,
so an assistant never plans around something it can’t do. An API error inside a
call – validation, insufficient_scope, not_found – comes back as a tool
result with isError: true and the same error body as REST, not as a
transport failure.
For MCP client authors
The server implements the Streamable HTTP transport, statelessly:POST
JSON-RPC to the URL above with a bearer; there is no session header and no
server-to-client stream (GET returns 405). An unauthenticated request
returns 401 with the protected-resource metadata the MCP authorization spec
requires:
https://www.dueflow.co/.well-known/oauth-authorization-server (issuer
https://www.dueflow.co). In short:
Access tokens are ordinary personal tokens, so everything in
Authentication about live roles, organization policy and
revocation applies to them unchanged, with two differences. A connected app
never receives parent or guardian contact details (even with
members:pii),
and GET /v1/me leaves out your account email and your other organizations.
And it acts for you only while it is connected, so it can’t hand out
credentials or staff access that would outlive the connection. Creating or
rotating API tokens, adding people to the team or changing their roles,
inviting chapter admins, turning on workflows that keep acting as you and
changing the organization’s API policy are refused for it; do those from the
dashboard. Of these, only a roster sync that names chapter admins
(chapters_applyRosterSync with adminEmails) can be reached over REST or
MCP, and it is refused before any chapter is created. Team, workflow, token and
policy changes have no endpoint or tool for any token.
