Kanban Importer MCP
Lets Claude, Codex or any MCP client read and move the tasks on a Trello board
that Kanban Importer created.
The loop it closes:
- You ask your assistant for the tasks only a person can do.
- Kanban Importer puts them on the board, in Backlog, each tagged with the
task id the assistant invented.
- You work the board.
- You ask the assistant how things stand. It reads the board itself.
- You tell the assistant a task is done. It moves the card.
Steps 4 and 5 are this package. Steps 1 to 3 need nothing but the Power-Up.
Why not a general purpose Trello MCP
Use one. Atlassian publishes an official Trello MCP
server,
free on every plan, and it covers far more of Trello than this does: boards,
lists, cards, checklists, create, move, comments. If what you want is an
assistant that can work your Trello account, that is the one to install, and
this is not trying to replace it.
This package does one thing those cannot, including the official one.
They speak in Trello card ids. This speaks in task ids. When an assistant
writes out your leftover work it invents its own name for each task, something
like rotate-stripe-webhook-secret. That is the only name it ever had. A
general server has to list the whole board and guess which card is which by
matching titles, which breaks the first time you rename a card, and renaming a
card is a normal thing to do to a card. move_task here takes
rotate-stripe-webhook-secret, never 68f3c1a0b4d2e9f77c0a1b23.
It reads the Power-Up's own card stamp as well as the description line, and no
general reader returns that stamp, so the match survives a rename, a reword and
an archive.
Two other differences worth knowing before you choose:
- One credential. This ships the Power-Up's own Trello app key, so setup is
a token and nothing else. Most community servers want an API key as well.
- It cannot create or delete. Three tools,
list_boards, list_tasks and
move_task. Importing is what the Power-Up is for, with a preview first, and
nothing an assistant does here can take work off your board.
Plenty of people will want both installed. They do not conflict.
Setup
Get a token. This link asks Trello for read and write access for Kanban
Importer, and gives you a token to paste:
https://trello.com/1/authorize?expiration=never&scope=read,write&response_type=token&key=d942028fe402246748954673a8420ed1&name=Kanban%20Importer
Then add the server to your client's MCP config:
{
"mcpServers": {
"kanban-importer": {
"command": "npx",
"args": ["-y", "@njligames/kanban-importer-mcp"],
"env": {
"TRELLO_TOKEN": "the token you just got"
}
}
}
}
That is the whole configuration. The API key defaults to the Power-Up's own,
which is public by design: a Trello app key grants nothing on its own.
TRELLO_TOKEN | Required. From the link above. |
TRELLO_BOARD | Optional. A board name or id, so you do not have to name one each time. With one board on the account it is worked out anyway. |
TRELLO_API_KEY | Optional. Only if you would rather authorize your own Trello app than ours. |
Tools
list_boards | The open boards on the account, by name. |
list_tasks | Every tagged task with the column it is in, plus the board's columns in order. |
move_task | Move one task to a named column. Brings an archived task back. |
list_tasks returns the columns in board order rather than a status word,
because a status vocabulary would be a guess on any board that does not use
the default columns, and a confident guess is worse than none.
What it does not do
It does not create cards. Importing is what the Power-Up is for, and it handles
lists, labels, members, dates, checklists and attachments in one pass with a
preview you can check first.
It does not delete anything, and move_task is the only write.
Where your token goes
Into your MCP client's config file, on your machine. The server sends it to
api.trello.com and nowhere else. Kanban Importer has no server of its own, so
there is nowhere else for it to go.
Development
npm install
npm test
npm run sync
npm run sync refreshes lib/ai-tasks.cjs from ../public/js/ai-tasks.js,
which is the file the Power-Up ships. It is a copy because npm cannot package a
file outside the package root; test/shared.test.js fails when it goes stale.
Listing it in the MCP registry
server.json carries the registry metadata and its name must match the
mcpName in package.json, or the publish is refused. Both move together when
the version does.
npm version patch
npm login
npm publish --access public
mcp-publisher login github
mcp-publisher publish
npm login before publishing, rather than npm publish --otp=<code>. The OTP
flag is refused on this account: npm answers 403 asking for 2FA or a bypass
token. The browser login flow satisfies the same requirement and npm is
restricting bypass tokens anyway, so do not go and make one.
The npm publish has to come first: the registry hosts metadata, not artifacts,
and it verifies the package exists and claims the same name.
The registry name is com.njligames/kanban-importer, authenticated against the
domain rather than against a GitHub organization. The GitHub route was tried
first and refused, because the account's public membership is in
onegroupcentral and the repo lives under NJLIGamesLtd. Beyond that
accident, a name tied to a GitHub org is tied to something that has already
moved once: this repo changed orgs on 2026-10-16.
Domain authentication needs a proof file, which is deployed and live at
https://njligames.com/.well-known/mcp-registry-auth. Its source is
website/.well-known/mcp-registry-auth in the njligames-site repo, and the
matching PRIVATE KEY is mcp/.tools/registry-key.pem, gitignored and never
published. Losing that key means generating a new pair and replacing the
deployed file; leaking it would let somebody else publish under
com.njligames/*, so treat it like an SSH key.
Logging in with it is not interactive:
PRIVATE_KEY="$(openssl pkey -in .tools/registry-key.pem -noout -text | grep -A3 "priv:" | tail -n +2 | tr -d ' :\n')"
./.tools/mcp-publisher login dns --domain njligames.com --private-key "${PRIVATE_KEY}"
./.tools/mcp-publisher publish
mcp-publisher itself lives in mcp/.tools/, which is gitignored; brew was
locked when it was needed, so it was installed from the official release
tarball instead of with brew install mcp-publisher.