curl.
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 call it makes appears in the
organization’s API activity log, attributed to you via the app.
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 endpoint the token is allowed to call, named
after the operation in snake_case – GET /v1/members is get_members,
PATCH /v1/members/{memberId} is patch_members_by_member_id. 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://dueflow.co/.well-known/oauth-authorization-server. In short:
Access tokens are ordinary personal tokens, so everything in
Authentication about live roles, organization policy and
revocation applies to them unchanged.

