Yarnt

Yarnt MCP Server

Let an agent work your board directly, over the MCP tool-call protocol.

The Yarnt MCP server is the agent twin of the REST API: the same operations and permission model, exposed as MCP tool calls instead of JSON over HTTP. Point Claude, or any MCP client, at it and it can list, create, and move tickets the same way you do.

Server URL: https://mcp.yarnt.app — paste this bare origin into your client. No path suffix.

Connecting

Transport is streamable HTTP, stateless: a client POSTs to the base URL for every call. There's no SSE stream to keep open; GET and DELETE against the URL both return 405.

Most clients only need the URL — they discover the OAuth endpoints themselves. For Claude Code:

claude mcp add --transport http yarnt https://mcp.yarnt.app

Other MCP clients take the same URL in whatever "add server" UI they have.

Authorizing

The first call opens a browser for a standard OAuth flow:

Why a robot

The agent never holds your password or a service key — only a scoped, revocable token bound to the robot. It sees and does exactly what that robot's membership permits. Every call goes through the same row-level security and limit rules as the app; it cannot touch billing.

Tokens & revoking

Access tokens last 1 hour; refresh tokens last 30 days and rotate on every use — each refresh issues a new one and revokes the old. Clients refresh automatically; you don't have to do anything. Revoke access by disabling the robot or revoking its refresh token.

Auth is OAuth 2.1 with PKCE (S256, required). Dynamic Client Registration is supported, so clients self-register with no manual setup.

Limits that apply to agents

A robot is exempt from the in-flight (WIP) cap: starting a ticket assigned to a robot never fails on WIP, and a robot's in-flight work never eats into a human's cap. Robots are not paid seats and do not inflate the workspace backlog pool.

The workspace backlog cap still applies — an agent creating tickets can hit a full queue like anyone else. The free exits are the same as for anyone: finish something or drop something.

Tools

Tools return plain text, not JSON. Assignee values are user ids (from list_users or whoami), never emails.

ToolParametersDoes
whoamiYour own id name (kind) plus the person who granted you access. Use instead of guessing which list_users row is you.
list_ticketslist opt (now / next / queue default / wishlist / finished / all), assignee opt (me / unassigned / user id), project optTickets in priority order; each row shows its list.
get_ticketid reqFull detail including the body/description.
create_tickettitle req, project opt, wish opt boolAdds to the queue's next list; wish: true files it on the wishlist instead, spending no backlog slot.
update_ticketid req, title opt, body opt, assignee opt/nullable, project opt/nullableEdit fields; omit to leave unchanged, null to clear. To move between lists use start/finish/drop.
start_ticketid reqStart it.
finish_ticketid reqFinish it.
drop_ticketid reqDrop it.
list_usersMembers you can assign to: id name (kind), kind is person or integration.
list_projectsincludeArchived opt boolProject names; archived omitted by default.
add_commentticketId req, body reqComment on a ticket.
list_commentsticketId reqComments, oldest first.
list_historyticketId reqChange history, oldest first.

Sample output

list_tickets:

b1e2...  [now] Fix the flaky deploy step @Claude
c7a4...  [next] Write onboarding empty states (unassigned)

whoami:

470ed8e7-...  Claude (integration)
granted by: 9eb481fe-...  Ada

Questions about the MCP server: help@yarnt.app.