ENDPOINT 1
https://mcp.kaiku.tech/mcp
MCP server metadata
- Name
- kaiku
- Version
- 1.1.0
A task tracker with a wiki attached. Everything you can see and change is what the authenticating token may reach — a project-scoped token sees exactly one project, and every write re-checks the caller's role there. Text is stored as written and rendered later, so it carries more than prose. In any description, comment or page body: - **Markdown** — headings, lists, tables, links, fenced code. Issue text also accepts Jira wiki markup (`h1.`, `*bold*`, `{code}`), since the tracker speaks the Jira API; either is fine, but don't mix the two in one field. - **Formulas** — `$…$` in a sentence, `$$…$$` on lines of its own for a displayed one, TeX inside, rendered with KaTeX. The rules are Pandoc's, so money survives: the opening `$` isn't followed by a space, the closing one isn't preceded by a space or followed by a digit, and `\$` is always a dollar sign. Mentions notify the person named, and how you write one differs by surface: - In an issue description or comment: `[~username]`. - In a wiki page or wiki comment: `[@Display Name](user:username)`. Either way the **username** is the handle — never the display name, never the email. Take it from `list_users` rather than assembling it out of somebody's name. (`assignee` is more forgiving: username or email.) A write that could mention anybody answers with **who it reached**: - `notified` — the people this write actually notifies, right now. - `unresolvedMentions` — what looked like a mention and reached nobody, each with a `reason`: `unknown` (no such handle), `inactive` (the account is blocked), `no_access` (a real person who cannot see this project), `self` (you named yourself, which notifies no one) — and sometimes a `didYouMean`. Read them. Nothing is refused over a mention and nothing is rewritten, so a wrong handle is stored exactly as written and the response is the **only** sign that the person you addressed was never called. `[~foo]` inside a code block or `{{monospace}}` is text, not a summons, and appears in neither list. A project may keep **columns of its own** beyond the Jira fields — `Segment`, `Country`, `Provider` — and an issue there is half-read without them. Ask `list_project_fields` before writing in an unfamiliar project; fill them in with `set_issue_fields`, by their names. This is not guessable from an issue: a column nobody has answered yet simply isn't in the payload. A project may have **rules**: when an issue enters a state, a checklist is appended to its description, whichever client made the move. So a checklist appearing after your `update_issue` is the project's doing — `list_project_rules` says which, and `get_project_rule_runs` says why one did not. Leave the `[//]: # (pm-rule:N)` line in a description alone: it is what keeps the checklist from being added twice. A project may also be cut into **tracks** — a play, a campaign, a rollout. A track is a declared LABEL, so work joins one by carrying that label and leaves by dropping it; it has no key of its own, and its issues keep the project's key. That is what separates it from a subproject, which is a separate project with its own key, board and wiki. Read them with `list_tracks`, declare one with `set_track`. Two things follow that an assistant gets wrong otherwise: putting an issue in a track is `update_issue` with the label, not a field; and `remove_track` undeclares the track without touching a single issue, so it can never lose work. A track that is merely finished — a play that has been staged — is archived instead (`set_track` with `archived=true`): it leaves the row above the board, keeps its name, icon and place, and its issues stay in it rather than becoming «outside every track». Wiki pages are Markdown, plus two things of their own: - **Real references**, not URLs that happen to work here: ``, `[text](page:Release Notes)`, `[text](page:OTHER/Title)`, `[text](attachment:spec.pdf)`. A `page:` link is by title and follows the page through a rename. - **A dark version of an image**: attach it under the same name with `-dark` before the extension (`diagram.svg` + `diagram-dark.svg`) and the page shows whichever suits the reader's theme. The body still references the plain name — there is no second syntax. So draw a diagram both ways: one drawn on white is a glare on a dark page, and neither a CSS filter nor a `prefers-color-scheme` rule inside the SVG fixes it (the filter turns a green "works" box purple, and the rule follows the OS rather than the reader's own theme switch). - **Text on a diagram is searchable**, but only if it is really text: the words inside an attached SVG are read on upload, so `search_wiki` finds the page by a label on its picture and a reader's find-in-page reaches those labels too. Write them as `<text>` elements. A generator that converts labels to outlines, or a diagram exported to PNG, produces a picture nobody can search — the same drawing, minus the words. - **Macros**, on a line of their own, `{name}` or `{name:key=value, …}`: `{toc}`, `{children}`, `{pagetree}`, `{recently-updated}`, `{contentbylabel}`, `{excerpt-include}`, and `{progress:PM-123}` — how much of that epic is done, counted when the page is read. Some wrap content, closed by the same token that opened them — `{info}` … `{info}` (also `{note}`, `{warning}`, `{tip}`, `{panel}`), `{expand:title=Details}` … `{expand}`, `{excerpt}` … `{excerpt}`. Two are inline as well: `{status:colour=green, title=Shipped}` and `{jira:key=PM-1}`. Separate parameters with commas, or with `|` when a value contains commas of its own (`{jira:jql=…|columns=key,summary}`). To change a page, work on its **Markdown source**, never on the plain text `get_wiki_page` gives by default: writing that back would flatten every formula, macro and reference on the page. And change only what you mean to change: - **Read a part.** `get_wiki_page(outline: true)` lists the headings with each section's anchor, lines and size; `section: "<anchor or heading>"` returns that section's Markdown, and `offset`/`limit` a run of lines on a page without headings. `withMarkdown: true` is the whole source — fine for a short page, too much for a long one. - **Edit in place.** `update_wiki_page(edits: [{oldText, newText}])` replaces exact text in the source — copy `oldText` from what you read, enough of it to occur exactly once — and `replaceSection` swaps one section whole. Pass the `version` you read as `expectedVersion`. Every edit is matched against the page as you read it; if one does not fit, nothing is written and the answer says which and why. The answer shows where each edit landed, not the page. - Replace the whole body (`markdown`) only when you mean to rewrite it. **Files on the person's own computer** cannot reach this server except as base64 typed through the conversation — fine for a line of CSV, wasteful for a screenshot, refused past a ceiling. A small local companion server, **pm-files**, attaches files by path and saves attachments to disk. If you need one and pm-files is not among your tools, call `local_files_setup` and give the person its command, rather than writing a one-off upload script. Never ask for their token: the command takes it from their clipboard.
Known tools 74
add_attachmentAttach a file to an issue: pass its bytes as 'contentBase64', or its content as 'text' when the file is text.
Inferred read-onlyadd_commentAdd a comment to an issue, or reply to one of its comments ('replyTo' is a comment id from get_comments).
Inferred read-onlyadd_wiki_attachmentAttach a file to a wiki page, identified by 'pageId' or by 'spaceKey' + 'title': pass its bytes as 'contentBase64', or its content as 'text' when the file is text.
Inferred read-onlyadd_wiki_commentComment on a wiki page, or reply to one of its comments ('replyTo' is a comment id from get_wiki_page).
Inferred read-onlyadmin_bank_transferAdministrators only: where a bank transfer is to be sent (PM-625) — beneficiary, account and its own currency, bank and SWIFT, the intermediary bank if there is one, the purpose line, how many days a wire is given, and who last changed all of it.
Potential side effectsadmin_errors_weekAdministrators only: the error collector's week — events and distinct errors per project against the week before, errors first seen that week with their release, the loudest by events and by people, and errors that came back after being resolved.
Inferred read-onlyadmin_funnelAdministrators only: the installation as a business over a period — registrations, how many of them became working companies, purchases and conversion by cohort, churn, and money.
Inferred read-onlyadmin_invoicesAdministrators only: what companies were asked to pay and what answered it — each invoice with its amount, its coin, whether it is paid and what is short, and the payments against it.
Potential side effectsadmin_landing_weekAdministrators only: the landing site's week — visits, where they came from, clicks on sign-up, and the registrations that followed.
Inferred read-onlyadmin_loadAdministrators only: how loaded this machine is and what the language models cost.
Inferred read-onlyadmin_overviewAdministrators only: the whole installation by the numbers — accounts, workspaces, projects, issues, comments and sprints, plus issues broken down by status and by project.
Inferred read-onlyadmin_set_bank_transferAdministrators only, and this one CHANGES things: state where bank transfers are to be sent.
Inferred read-onlyadmin_workspace_journalAdministrators only: what was done to one company and by whom — created, plan changed, period extended by hand, credited, suspended, resumed, erased — newest first, up to a hundred entries, each with the reason that was written down at the time.
Inferred read-onlyadmin_workspacesAdministrators only: every company on the installation — its plan, what state it is in (trial, active, over-limit, suspended…), when what it paid for runs out, how many days are left, what it is using against what it may use, and its balance.
Inferred read-onlyanswer_issue_questionAnswer a question that was put to you on an issue, by choosing one of its options.
Inferred read-onlyask_issue_questionAsk one person a question with pre-written answer options, in an issue's thread — the way to get a decision that does not get lost in the comment stream.
Inferred read-onlycreate_projectAdministrators only: create a project — a new key, a starter board, and its own wiki space, led by you unless you name someone else.
Potential side effectscreate_project_ruleAdd a rule to a project: when an issue enters 'status', append 'template' to its description.
Inferred read-onlydecide_support_letterDecide what a held or failed letter to the support address is.
Inferred read-onlydelete_agent_usageRemove one agent-usage record from an issue, by the id that get_agent_usage returns.
Potential side effectsdelete_attachmentRemove a file from an issue, by 'filename' or by attachment 'id' — both come back from get_issue.
Potential side effectsdelete_wiki_attachmentRemove a file from a wiki page, by its 'filename' as listed by get_wiki_page.
Potential side effectsget_agent_usageWhat background-agent runs have cost an issue (local or mirrored/upstream): one record per run (tokens by kind, machine time, agent/model/host) plus the totals.
Inferred read-onlyget_attachmentRead one file attached to an issue — its bytes, base64-encoded — by the issue key and the 'filename' as get_issue lists it.
Inferred read-onlyget_changeThe files one merge request, pull request or commit touches, with their diffs.
Inferred read-onlyget_project_rule_runsA project rule's journal, newest first: each time an issue entered the rule's state and matched its conditions — which issue, who moved it, and the outcome: 'applied' (checklist added), 'alreadyThere' (its marker line was already in the description, nothing added) or 'tooLong' (the description would have been too long, nothing added); for a duty, 'handed' (the issue went to its agent), 'busy' (an agent already had it), 'tooMany' (the duty's fifty a day were used up) or 'refused' with a 'reason' (agent_off, agent_budget, …), and 'ownerLost' when the duty was switched off because its owner lost the project.
Inferred read-onlyget_support_letterRead one letter to the support address whole — the quoted thread and the signature that the request's comment leaves out, the HTML part as text, and the headers.
Inferred read-onlyget_support_requestRead who is behind a support request: the requester's name and email, whether they asked signed in (and from which workspace), their client version, what the product knew when they asked from inside it ('context': the screen, the client, the last refusal the server gave them with its request id), and which comments of the issue the requester can see ('messages', by comment id and direction; 'autoRule' names the rule when the desk's automatic answer wrote it rather than a person, 'autoWording' says whether the model worded it or the template went).
Potential side effectsget_wiki_attachmentRead one file attached to a wiki page — its bytes, base64-encoded — identifying the page by 'pageId' or by 'spaceKey' + 'title' and the file by 'filename' as get_wiki_page lists it.
Inferred read-onlyget_wiki_pageGet one wiki page by id, or by space key + title, if it is visible to this token.
Inferred read-onlylink_issuesLink two issues: link_issues('PM-419', 'PM-417', 'is blocked by') records that PM-419 is blocked by PM-417.
Inferred read-onlylist_credentialsList the credentials attached to an issue or a wiki page that this token may read — names and who attached them, never the values.
Inferred read-onlylist_issue_questionsQuestions with answer options, in either direction: what is waiting on YOU to answer (role='to_me'), what YOU asked and are waiting on somebody for (role='asked'), or everything on one issue.
Inferred read-onlylist_project_fieldsThe columns a project keeps about its issues: name, kind, and a list's options with their colours.
Inferred read-onlylist_project_rulesA project's rules: when an issue enters a state, a checklist from a template is appended to its description.
Inferred read-onlylist_projectsList the projects visible to this token (a project-scoped token sees only its project).
Inferred read-onlylist_support_lettersList letters to the support address that did not become part of a request: 'held' (looked like spam, or too many at once from one address or on one request), 'failed' (we could not file them), 'ignored' (an autoresponder, a bounce, a mailing list, our own letter), 'dismissed'.
Inferred read-onlylist_support_queueThe support desk's queue: open requests, the most urgent first — overdue, then due soonest, then those waiting on their requester.
Inferred read-onlylist_tracksThe tracks a project is cut into: a track is a LABEL the project declared meaningful — a play, a campaign, a rollout — and work joins one by carrying that label.
Inferred read-onlylist_usersList the people you can assign work to or mention: the members of the projects this token can see.
Inferred read-onlylocal_files_setupHow the person connects pm-files — a small local MCP server that attaches files from their own computer to issues and wiki pages by path, and saves attachments back to files, so no bytes pass through the conversation.
Inferred read-onlymove_issueMove an issue into another project, taking its comments, history, attachments, links and sub-tasks with it.
Inferred read-onlyreport_agent_usageRecord what one agent run cost an issue (local or mirrored/upstream): tokens by kind and machine time.
Inferred read-onlysearch_codeFind where a string appears in the code of the repositories connected to a project, with the file, the line number and the lines around it.
Inferred read-onlysearch_issuesSearch the issues visible to this token, with a JQL query — the same JQL the Jira REST surface takes, read by the same parser.
Inferred read-onlysearch_wikiSearch wiki pages visible to this token by free text (matched in the title, the body, and the labels written on an attached SVG diagram).
Inferred read-onlyset_issue_fieldsFill in a project's own columns on one issue, by their NAMES: 'Segment=AI; Country=Poland; Started=2026-08-01', or a JSON object.
Inferred read-onlyset_project_fieldAdd a column to a project, or edit the one that already has this name.
Potential side effectsset_project_parentMake an existing project a subproject of another, or take it back out with an empty parentKey.
Inferred read-onlyset_trackDeclare a track on a project, or edit the one that already has this tag.
Potential side effectsunlink_issuesRemove a link between two issues: name both ends (and, when more than one link joins them, the phrase — 'blocks', 'relates to'), or give the 'linkId' get_issue returned.
Potential side effectsupdate_commentEdit a comment on an issue: pass 'body' to replace the whole of it, or 'edits' to change part of it — exact find-and-replace against the comment as get_comments hands it back, each 'oldText' occurring exactly once.
Potential side effectsupdate_issueUpdate an issue: any of summary, description, type, assignee, priority, labels, dueDate, parentKey, or status (which performs the transition, and fires the project's rules — a rule may append a checklist to the description, in which case 'description' is listed in 'changed').
Potential side effectsupdate_wiki_commentEdit a comment on a wiki page — your own, or anyone's with full write access in that project.
Potential side effectsupdate_wiki_pageEdit a wiki page: retitle it, change its body, move it under another parent (or to the top of its space), or set its labels.
Potential side effectsupsert_mcp_connectionAdmin only: create or update a project's external MCP connection.
Potential side effectswithdraw_issue_questionTake back a question you asked, when it no longer needs answering — you worked it out, or the task moved on.
Inferred read-onlyCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.kaiku]
url = "https://mcp.kaiku.tech/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"kaiku": {
"type": "http",
"url": "https://mcp.kaiku.tech/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: kaiku
Remote MCP URL: https://mcp.kaiku.tech/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"kaiku": {
"url": "https://mcp.kaiku.tech/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"kaiku": {
"type": "http",
"url": "https://mcp.kaiku.tech/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "kaiku",
"transport": "streamable-http",
"url": "https://mcp.kaiku.tech/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
ENDPOINT 2
https://app.kaiku.tech/mcp
Known tools 0
No tool metadata was available in the registry cache.
CONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.kaiku-tech]
url = "https://app.kaiku.tech/mcp"
enabled = true
bearer_token_env_var = "MCP_BEARER_TOKEN"
Authentication is required. Replace the placeholder locally and never commit a secret.
Claude Code
.mcp.json
{
"mcpServers": {
"kaiku-tech": {
"type": "http",
"url": "https://app.kaiku.tech/mcp",
"headers": {
"Authorization": "Bearer YOUR_BEARER_TOKEN"
}
}
}
}
Authentication is required. Replace the placeholder locally and never commit a secret.
Claude Desktop
Settings → Connectors → Add custom connector
Name: kaiku-tech
Remote MCP URL: https://app.kaiku.tech/mcp
Add the URL as a custom connector, then complete its supported authorization flow. Claude Desktop remote connectors are configured in the UI.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"kaiku-tech": {
"url": "https://app.kaiku.tech/mcp",
"headers": {
"Authorization": "Bearer YOUR_BEARER_TOKEN"
}
}
}
}
Authentication is required. Replace the placeholder locally and never commit a secret.
Visual Studio Code
.vscode/mcp.json
{
"servers": {
"kaiku-tech": {
"type": "http",
"url": "https://app.kaiku.tech/mcp",
"headers": {
"Authorization": "Bearer ${input:mcp-token}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "mcp-token",
"description": "kaiku-tech bearer token",
"password": true
}
]
}
Authentication is required. Replace the placeholder locally and never commit a secret.
Generic MCP
Client-specific MCP configuration
{
"name": "kaiku-tech",
"transport": "streamable-http",
"url": "https://app.kaiku.tech/mcp",
"headers": {
"Authorization": "Bearer YOUR_BEARER_TOKEN"
}
}
Authentication is required. Replace the placeholder locally and never commit a secret.
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Loading Trust v2 evidence…
Checking the associated registrable domain. The BuiltWith key remains server-side.
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.