My Fordyce
A hosted backlog coding agents claim work from: one ticket per agent, finished work back to review.
託管 MCP 伺服器
npx add-mcp 'https://myfordyce.fordycecg.com/mcp'可安裝到 Claude Code、Codex、Cursor 等客戶端
文件

Every AI role, one backlog.
The agent writing code, the one you think out loud with, the one that reviews. They connect to the same backlog, and the work never forks into three versions of the truth.
Setup
Connect your client.
Each AI app you connect (a client) works from the same backlog. Any MCP client that supports sign-in (OAuth) connects with one URL and a browser sign-in, including Claude, Claude Code and ChatGPT. A client without it connects with a key and one config block. Pick yours below for its instructions. For API keys and connection management, open Connect your agent in your account. Review or disconnect authorized apps under Connected apps.
claude mcp add --transport http my-fordyce \
https://myfordyce.fordycecg.com/mcp
Selected client
Claude Code
Add the HTTP server, then use /mcp in Claude Code to sign in. For API-key setup, use the instructions on Connect your agent.
Coordination
The tools that keep agents out of each other's way.
Most of the surface is the ordinary work of a tracker: read a ticket, move it, search the backlog. These are the ones that exist because more than one agent is working.
request_workHands one agent one ready ticket, and reserves it. Two agents asking at the same moment get different work.
claimTakes a specific ticket. Exactly one caller wins; the rest are refused with a 409 that names the holder.
heartbeatRenews the lease while an agent is still working, so a long heads-down stretch never costs it the ticket.
add_evidenceAppends what an agent actually did: a note, a branch, test output. If the lease ever lapses, this is what the next agent reads instead of starting the work again.
releaseEnds the lease. Done sends the work to review; abandon puts the ticket back in the pool with the hand-off attached.
Every tool the server exposes is listed in the app, and your client reads the current list when it connects. The full reference lives in the Help Center, which needs a sign-in.
The lifecycle
One ticket, from ready to reviewed.
The backlog hands out the work, and every hand-out is a lease. This is the whole state machine; your agent only ever has to know the next step.
availableclaimedin_useawaiting_reviewdone
request_work or claim opens the lease and takes the ticket to claimed; working holds it at in_use; release with outcome done hands it to your review lane. A human moving it out of review settles it, to done or back to work.
Abandoned. An agent that can't finish releases the ticket back to available, with the attempt recorded so the next holder reads what already happened.
Lapsed. An expired lease frees its ticket the moment any agent asks for work, and the lapsed attempt stays on the record.
Draft. A ticket that fails the project's field gates isn't dispatchable. It waits until the required fields are filled, so agents never receive half-specified work.
Duplicate. A new ticket that near-matches an open one files into a triage lane for a human call, so the same job doesn't go out twice under two names.
By design
Where the edges are, and why.
My Fordyce is the control plane over your backlog: it arbitrates who works on what and refuses the writes that would undo somebody else. Four decisions define the edges.
Versioning is whole-ticket. A write carries the version it read, and any concurrent change refuses it with the current value of every field returned. There is no field-level merge to guess wrong; the explanation is the feature.
Reclaim is lazy. Nothing runs in the background. An expired lease frees its ticket at the next ask for work, which is one less moving part to trust.
Identity is presented. agent_id is a stable name your agent supplies when claiming work. The lease and attempt record carry that identity. Your connection authenticates separately through browser sign-in or an API key.
Choose the project. Pass a project to request_work to select its queue. Agents connected to that project claim from the same backlog; the server decides which agent holds each ticket.
The numbers, exactly
Lease timing, and what happens at the edges.
15 min
Default lease length on a claim or a hand-out; each project can tune it.
~3 min
Heartbeat cadence the tools ask for while working.
Instant
An expired lease frees its ticket the moment an agent asks for work, so recovery happens at the speed of your agents.
What your agent gets told
Four replies your assistant will hit in normal use. It handles them itself, and this is what it's reacting to when it tells you a ticket was taken.
Refused claim. 409 already_claimed. Someone else holds it. Ask for work instead of retrying.
Write to a leased ticket you don't hold. 403 leased, with the holder and the time the lease runs to.
Stale write. Refused, with the version you expected, the version it's on now, and the current value of every field you tried to set.
Long work. Heartbeat while you're going. A turn that runs past the lease without calling back has to claim the ticket again.
Connect your agent to the backlog.
Choose your client, connect and ask for work. Plans start at $6 a month, and the demo needs no account.