TeamFlow in Claude Desktop
Claude Desktop adds remote MCP servers through the Connectors UI, not through claude_desktop_config.json. That file is for stdio servers and has no documented url key. Skills are a ZIP uploaded through the same UI, and instructions live in a Project. All three are UI, so the installer writes one file for you to paste and says so rather than pretending otherwise.
Tool Claude Desktop Reporting Rules, then a git hook
1. Install
npx -y github:macleodlabs-ai/teamflow-plugin skills install --for claude-desktop
That writes:
.teamflow/claude-desktop-instructions.md— the rules document, for you to paste into Project instructions
Then, by hand, because this part is UI:
- Settings -> Connectors -> Add -> Add custom connector -> https://codercat.io/mcp
- Create a Project for this codebase and paste the rules document into its Project instructions.
Add --scope user to install for every project on this machine, or --dry-run to see the file list without writing anything. Re-running it replaces TeamFlow's block and leaves the rest of each file alone.
2. The skills you get
The same ten the Claude Code plugin carries, generated from the same SKILL.md files. This tool has no skill loader, so they arrive as sections of the rules file the installer writes rather than as files nothing would read; ask for one by name and the agent runs its command.
| Skill | What it does |
|---|---|
teamflow-login / teamflow-logout | sign in once, or remove the session |
teamflow-status | who is signed in, what is bound, what was last sent |
teamflow-bind / teamflow-unbind | name the ticket by hand, or stop |
teamflow-sync | publish the current state now |
teamflow-doctor | transport, account, credits, tracker MCP |
teamflow-repos | register a repository so its CI can report |
teamflow-admin-code | email an invite code to an org admin; superadmins only |
macleodlabs-teamflow-client | call the paid service over MCP or REST |
Each one wraps a github:macleodlabs-ai/teamflow-plugin subcommand, so the skill and the shell command are the same thing. Inside Claude Code they are /teamflow:login, /teamflow:status and so on.
3. Sign in once
An authorization screen appears as soon as the connector is added and hands off to the browser. Afterwards, open the connector to choose which of its three tools Claude may call without asking.
4. Adding it by hand
- Settings -> Connectors -> Add -> Add custom connector.
- Paste
https://codercat.io/mcp. - Add.
On Team or Enterprise the same thing lives under Organization settings -> Connectors, and adding it there gives it to everyone at once.
Claude reaches a remote connector from Anthropic's own infrastructure rather than from your laptop, so the endpoint has to be publicly reachable. codercat.io is.
If you specifically need it in the local config file, bridge it over stdio:
{
"mcpServers": {
"teamflow": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://codercat.io/mcp"]
}
}
}
That is the community pattern rather than a documented one. The Connectors route is the supported path.
Claude Desktop has no skills directory on disk. Its custom skills are packaged as a ZIP and uploaded under Customize -> Skills, which needs code execution enabled in Settings. The installer does not try to automate that.
Note also that ~/.claude/skills is a real path but it belongs to Claude Code, not Claude Desktop. Writing there does nothing for this client.
Claude Desktop is a chat window, not a coding agent with a checkout. It will report the stage you tell it about, and it cannot observe a test run it did not perform. For a repository where work actually happens, Claude Code reports the same stages automatically and instructs nobody.
5. The stages to report
| Stage | When |
|---|---|
LOCAL_DEV | code is being written on a workstation |
LOCAL_TEST | the local test suite or build passed |
LOCAL_AUDIT | a local review, lint or security audit passed |
LOCAL_REWORK | a local gate failed; pass --rework-from naming it |
MERGE | the pull request is merged, or ready to be |
CI_BUILD | CI is building the merged change |
DEPLOY_DEV | the change is deployed to the shared dev environment |
DEV_TEST | tests passed against dev |
DEV_AUDIT | an audit passed against dev |
DEV_REWORK | a dev gate failed; pass --rework-from naming it |
DEV_VERIFIED | verified in dev |
READY_PROD | waiting on the production decision |
JIRA is the thirteenth: the ticket exists and nothing has started. Statuses are running, success, waiting, blocked, failed and idle. This is the same vocabulary the Claude Code plugin derives, so a ticket moved from here sits in the same column as one moved by Claude.
6. Without the agent
Anything that runs in a shell posts the same report with no model involved. A git hook, an npm script, a run configuration, a CI step:
npx -y github:macleodlabs-ai/teamflow-plugin report --issue DAEMON-142 --stage LOCAL_TEST \
--status success --summary "42 tests, 0 failing"
Same envelope, same transport, same credential. Prefer it wherever the board has to be right whether or not an agent remembered. npx -y github:macleodlabs-ai/teamflow-plugin report --help lists every flag.
7. What this is not
Claude Desktop has no hooks, so the agent reports because its rules file tells it to; a git hook keeps the board complete when it forgets. The chat side runs no local command and has no hooks; the Code tab is Claude Code and is covered by installing the plugin there.
Which usually happens and sometimes does not. For a board that has to be complete, put npx -y github:macleodlabs-ai/teamflow-plugin report in the git hook or the test script that already runs on every change, where no model has to remember it.
8. What leaves your machine
TeamFlow is a delivery map for Jira, Linear and GitHub issues, run by MacleodLabs. Reports carry derived state only: a ticket key, a stage, a status, a short summary and evidence links. Prompts, diffs, source code, commands and logs are never sent and are rejected before they are charged.