Kaiku
REMOTE · MCP.KAIKU.TECH · 2 COMPONENTS · SCANNED SEP 23
Issue tracker and wiki for teams and their agents: find, file and update issues, write pages.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 20317 tokens (~274/item across 74 items; 74 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management3
- Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 12 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "admin_bank_transfer" implies "transfer" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 75 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Kaiku MCP server?
Kaiku is a hosted endpoint at https://mcp.kaiku.tech/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.kaiku.tech
claude mcp add --transport http tech-kaiku-kaiku 'https://mcp.kaiku.tech/mcp'
{
"mcpServers": {
"tech-kaiku-kaiku": {
"url": "https://mcp.kaiku.tech/mcp"
}
}
} {
"servers": {
"tech-kaiku-kaiku": {
"type": "http",
"url": "https://mcp.kaiku.tech/mcp"
}
}
} [mcp_servers.tech-kaiku-kaiku] url = "https://mcp.kaiku.tech/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"tech-kaiku-kaiku": {
"type": "remote",
"url": "https://mcp.kaiku.tech/mcp",
"enabled": true
}
}
} openclaw mcp add tech-kaiku-kaiku --url 'https://mcp.kaiku.tech/mcp' --transport streamable-http
mcp_servers:
tech-kaiku-kaiku:
url: "https://mcp.kaiku.tech/mcp" {
"McpServers": {
"tech-kaiku-kaiku": {
"Transport": "http",
"Url": "https://mcp.kaiku.tech/mcp"
}
}
} assistant mcp add tech-kaiku-kaiku -t streamable-http -u 'https://mcp.kaiku.tech/mcp'
{
"mcpServers": {
"tech-kaiku-kaiku": {
"type": "http",
"url": "https://mcp.kaiku.tech/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 23 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “add_attachment” rewrote its description, which is the text the model reads security
- Tool “add_wiki_attachment” rewrote its description, which is the text the model reads security
- Tool “get_attachment” rewrote its description, which is the text the model reads security
- Tool “get_wiki_attachment” rewrote its description, which is the text the model reads security
- Stability: unverified → 0.03 ▲ functional
- New tool “local_files_setup” functional
- 22 Sept 26 74
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 23 Sept 2026 · Probed https://mcp.kaiku.tech/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=*.kaiku.tech | CN=YR1,O=Let's Encrypt,C=US | 23 Aug 2026 | 21 Nov 2026 | RSA 4096 | SHA256-RSA | 6c9d9025f51a369dcf0d95953df9c2a41a6 |
| SANs: *.kaiku.tech | ||||||
| CN=YR1,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | a20253f15f2691c05dc1ce13b9bcca4e |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.kaiku.tech. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| tech. | present | 2185 | 13 | Verified |
| kaiku.tech. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Challenged, unverified
The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.
| Result | Challenged, unverified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer realm="mcp"
Bearer realm="mcp" | Header | Value |
|---|---|
| strict-transport-security | max-age=31536000 |
Protected resource metadata
| Retrieved | No |
|---|---|
| Problem | no_resource_metadata |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.kaiku.tech/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.kaiku.tech/mcp | HTTPS enforced | 301 | https://mcp.kaiku.tech/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_attachment ~304
Attach a file to an issue: pass its bytes as 'contentBase64', or its content as 'text' when the file is text. Attaching a filename the issue already has replaces that file rather than adding a second copy, so retrying this call cannot double it. A file on the person's own disk — a screenshot, a PDF — is better attached by path through the pm-files MCP server than typed out as base64; local_files_setup says how to connect it. Returns the attachment's download URL. Requires permission to edit issues in that project.
| Name | Type | Req | Description |
|---|---|---|---|
| contentBase64 | string|null | – | The file's bytes, base64-encoded (a 'data:…;base64,…' URL is accepted and unwrapped). Use 'text' instead when the file is text. |
| filename | string | yes | File name to store, e.g. 'report.pdf'. Any directory part is dropped. |
| key | string | yes | Issue key, e.g. 'UK-1'. |
| mimeType | string|null | – | Content type to record for the listing, e.g. 'text/csv'. Ignored when the bytes identify themselves (a PNG is a PNG whatever you call it), and never used to serve the file. |
| text | string|null | – | The file's content as text, stored as UTF-8 — for a log, CSV or Markdown file you are writing here. Alternative to 'contentBase64'; passing both is refused. |
No output schema declared.
No examples provided.
add_comment ~350
Add a comment to an issue, or reply to one of its comments ('replyTo' is a comment id from get_comments). A reply notifies the author of the comment it answers, whether or not they watch the issue — no mention needed — and they are told once even if also mentioned. Requires permission to comment in that project (read-only members cannot). Answers with 'notified' (who this actually reaches, the answered author included), 'answered' (for a reply: whose comment it answers, and 'notified' false with a 'reason' when they are not told) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land. Where the workspace has agents, [~agent:role] (e.g. [~agent:product]) calls one to answer in the thread on your behalf: 'agents' lists each call with its requestId and status, and an agent that will not come is in 'unresolvedMentions' with its reason (agent_unknown, agent_off, agent_plan, agent_budget, too_many).
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Comment body. Markdown is kept as written, and carries $…$ / $$…$$ LaTeX formulas and [~username] mentions (the username, which list_users hands you ready-made — never the display name). |
| key | string | yes | Issue key, e.g. 'UK-1'. |
| replyTo | integer|null | – | The comment this one answers, as returned by get_comments — on the same issue and not deleted. |
No output schema declared.
No examples provided.
add_wiki_attachment ~437
Attach 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. Re-attaching a filename the page already has replaces its bytes and bumps its version, as the wiki does everywhere else, so retrying this call cannot leave two copies. A file on the person's own disk — a screenshot, a PDF — is better attached by path through the pm-files MCP server than typed out as base64; local_files_setup says how to connect it. An attached file is not *on* the page until the body references it — the answer hands you the Markdown to add with update_wiki_page. An image may also carry a dark-theme version, attached as the same name with '-dark' before the extension (diagram.svg + diagram-dark.svg); the body still references the plain name. Requires permission to edit the page.
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string|null | – | Short note about this upload, shown in the page's attachment list. |
| contentBase64 | string|null | – | The file's bytes, base64-encoded (a 'data:…;base64,…' URL is accepted and unwrapped). Use 'text' instead when the file is text. |
| filename | string | yes | File name to store, e.g. 'diagram.png'. Any directory part is dropped. |
| mimeType | string|null | – | Content type to record for the listing, e.g. 'text/csv'. Ignored when the bytes identify themselves, and never used to serve the file. |
| pageId | integer|null | – | Page id (as returned by search_wiki). |
| spaceKey | string|null | – | Space key, when identifying the page by title. |
| text | string|null | – | The file's content as text, stored as UTF-8 — for a log, CSV or Markdown file you are writing here. Alternative to 'contentBase64'; passing both is refused. |
| title | string|null | – | Exact page title, when identifying the page by title. |
No output schema declared.
No examples provided.
add_wiki_comment ~314
Comment on a wiki page, or reply to one of its comments ('replyTo' is a comment id from get_wiki_page). A reply notifies the author of the comment it answers, whether or not they watch the page — no mention needed — and they are told once even if also mentioned. Identify the page by 'pageId', or by 'spaceKey' + 'title'. Markdown is rendered; mention someone as [@Their Name](user:username), the wiki's own form. Requires permission to comment in that project. Answers with 'notified' (who this actually reaches, the answered author included), 'answered' (for a reply: whose comment it answers, and 'notified' false with a 'reason' when they are not told) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Comment body as Markdown, which also carries $…$ / $$…$$ LaTeX formulas. |
| pageId | integer|null | – | Page id (as returned by search_wiki). |
| replyTo | integer|null | – | The comment this one answers, as returned by get_wiki_page. |
| spaceKey | string|null | – | Space key, when identifying the page by title. |
| title | string|null | – | Exact page title, when identifying the page by title. |
No output schema declared.
No examples provided.
admin_bank_transfer ~143
Administrators 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. 'offered' is the one flag that answers «may a customer pick a transfer right now»: it is switched on AND carrying everything a payment needs, which is not the same as 'enabled'. A bill already issued carries its own frozen copy of these details and is not changed by what this returns. Amounts are always USD, whatever the account's own currency is.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
admin_errors_week ~115
Administrators 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. The same numbers the weekly error report carries. A project the collector did not answer about has null counts and a reason, never zeros. Ask for an earlier week with weeksAgo.
| Name | Type | Req | Description |
|---|---|---|---|
| weeksAgo | integer | – | 0 is the last full week, 1 the one before it. |
No output schema declared.
No examples provided.
admin_funnel ~365
Administrators 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. Money comes in two halves that must not be added together: 'stock' is what recurs every month at today's prices, 'revenue' is what actually arrived inside the period. Each carries its own currency. Figures come from the fleet's ledger, so 'machines' says how current each machine's copy is — a machine that is behind makes the totals older than they look, it does not make them wrong. 'activation' is how many of the companies registered in the period have had their first agent come in (the first request with a configured token), and how soon — within the hour, the day, the week. 'ai' is AI as money over the same period — what our key's calls cost at each provider, what companies were charged, the margin, the cost nobody was charged for and why, what has accrued and what 'ai' invoices still want — and is neither in 'stock' nor in 'revenue'. Its totals are null, never zero, while a machine has not reported its AI: 'ai.missing' names it and 'ai.reported' is the sum over the machines that did. Default period: the last 90 days.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer|null | – | How many days back from today. Defaults to 90, at most 730. Ignored when 'from' and 'to' are given. |
| from | string|null | – | Start of the period, as YYYY-MM-DD. Use with 'to'. |
| to | string|null | – | End of the period, as YYYY-MM-DD, included. Use with 'from'. |
No output schema declared.
No examples provided.
admin_invoices ~185
Administrators 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. Amounts are never added across coins: each row carries its own currency and they stay apart. The list is the fleet's ledger, so 'machines' says how current each machine's copy is. One invoice's delivery record belongs to the machine that took the payment and is not rolled up — the answer says so where it is missing rather than showing an empty list.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | How many rows, newest first. Default 50, at most 100. |
| slug | string|null | – | Only invoices of the company at this address. |
| status | string|null | – | Only invoices in this state, e.g. 'open', 'paid', 'void'. |
No output schema declared.
No examples provided.
admin_landing_week ~91
Administrators only: the landing site's week — visits, where they came from, clicks on sign-up, and the registrations that followed. The same numbers the weekly report carries into the monitoring chat. Ask for an earlier week with weeksAgo. The rendered message is not returned, only the figures.
| Name | Type | Req | Description |
|---|---|---|---|
| weeksAgo | integer | – | 0 is the last full week, 1 the one before it. |
No output schema declared.
No examples provided.
admin_load ~130
Administrators only: how loaded this machine is and what the language models cost. Load is this machine's own — database, streams, memory, processor, traffic and stored bytes, each as used against allowed, where an allowance is known. Model spend covers the assistant, search-by-sentence and translation over a rolling window, with totals and breakdowns by feature, by model and by day; costs are estimates from the prices recorded at the time. Who spent it is not returned here.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Window for model spend, in days. Default 30; 0 means all time. |
No output schema declared.
No examples provided.
admin_overview ~127
Administrators only: the whole installation by the numbers — accounts, workspaces, projects, issues, comments and sprints, plus issues broken down by status and by project. Counted across every workspace, which is what makes it the installation's rather than one company's. A total is null, never zero, when a machine of the fleet did not answer: 'fleet' says which machines were asked and which are missing, and 'here' is always what this machine counted. The breakdowns are this machine's. Read a null as 'nobody knows', never as 'none'.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
admin_set_bank_transfer ~538
Administrators only, and this one CHANGES things: state where bank transfers are to be sent. Send the WHOLE set every time — anything left out is cleared, not kept, because details half of one bank and half of another are money sent to a mixture of two. Read admin_bank_transfer first and repeat what you are not changing. Switching the method on is refused while anything a payment needs is missing (beneficiary, account, swift, and a purpose line carrying {invoice}), and the refusal names the field; switching it off is never refused. 'minimumUsd' is a floor under the METHOD and not under the debt: a bill below it is offered the other ways to pay, and what is owed does not change. The change is recorded against the calling administrator. Bills already issued keep the details they were issued with.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string|null | – | The account number or IBAN. |
| accountCurrency | string|null | – | The account's OWN currency, e.g. 'AMD'. Bills stay in USD; this is what the receiving bank converts into. |
| bankName | string|null | – | The bank's name and address. |
| beneficiary | string|null | – | Who the money is sent to — the account holder's name as the bank has it. |
| daysToArrive | integer|null | – | How many days a wire is given to arrive, 1 to 60. The period stays open that long. Left out, the stored number is kept (7 to start with). |
| enabled | boolean | yes | Whether this installation takes transfers. On is refused while a required field is missing; off never is. |
| intermediaryAccount | string|null | – | Our account at the intermediary bank. |
| intermediaryBank | string|null | – | The intermediary bank's name, where one is needed. |
| intermediarySwift | string|null | – | The intermediary bank's SWIFT/BIC. |
| minimumUsd | number|null | – | The smallest bill that may be paid by transfer, in USD — correspondent fees eat a small one. Left out there is NO floor, which is the cleared state and not zero; a customer under it is offered the ot… |
| note | string|null | – | A line for the payer, e.g. which charges are whose. Shown with the details. |
| purpose | string|null | – | What the payer must write as the purpose. Has to carry {invoice} — a transfer that does not name its bill arrives as a sum nobody can place. Defaults to 'Invoice {invoice}'. |
| swift | string|null | – | The bank's SWIFT/BIC. |
No output schema declared.
No examples provided.
admin_workspace_journal ~142
Administrators 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. This is the answer to 'why is this company on a period nobody paid for'. The actor is our own operator, and is named because an entry without one answers nothing. A company living on another machine of the fleet is not here: the answer then names the machine to ask.
| Name | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | The company's address — 'acme' in acme.kaiku.tech. |
No output schema declared.
No examples provided.
admin_workspaces ~286
Administrators 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. Ask with endingInDays to get only the ones running out that soon, which is how 'whose trial ends this week' is answered in one call. 'attention' is the console's own short list of rows somebody has to look at. A meter reading null means the machine holding that company was not asked, not that it is idle. Owners are left out unless withOwners is true, and an e-mail address is never returned.
| Name | Type | Req | Description |
|---|---|---|---|
| endingInDays | integer|null | – | Only companies whose paid-for period ends within this many days. 0 means already run out. |
| slug | string|null | – | Only the company at this address ('acme' in acme.kaiku.tech). |
| status | string|null | – | Only companies in this state: 'trial', 'active', 'free', 'over-limit', 'expired', 'suspended'. |
| withOwners | boolean | – | Include who owns each company — username and display name, never an e-mail. Off by default: this is a statistics surface, and a list of customers with names on it is a customer list. |
No output schema declared.
No examples provided.
answer_issue_question ~195
Answer a question that was put to you on an issue, by choosing one of its options. Only the person the question was addressed to may answer it; answering again with a different option changes the answer and says so in the thread. A question whose deadline already passed can still be answered — that replaces whatever the deadline took, and the change is recorded. The answer is written into the thread as an ordinary comment and the asker is told.
| Name | Type | Req | Description |
|---|---|---|---|
| note | string|null | – | Words of your own beside the option — a qualification, not the answer itself ('Postgres, but only after the migration lands'). Ignored when the asker switched free text off; check 'allowsFreeText' on… |
| option | integer | yes | Which option to choose, counted from 0 in the order they were offered. |
| questionId | integer | yes | The question's id, as returned by list_issue_questions or ask_issue_question. |
No output schema declared.
No examples provided.
ask_issue_question ~435
Ask 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. The question appears as an ordinary comment (so every Jira-speaking reader sees it) and is tracked separately: the person you ask sees it counted in their Questions list until they answer. It does not wait for ever — give 'defaultOption' and the deadline takes it if nobody answers, so a blocked run can go on. Requires permission to comment in that project. NOTE: this is not the bgs 'ask_question' tool, which is the background-agent ledger — this one is a question to a person on a PM issue.
| Name | Type | Req | Description |
|---|---|---|---|
| allowFreeText | boolean | – | Whether the answerer may add words of their own beside the option they choose. Defaults to true. Set false when the answer has to be machine-comparable and nothing else. |
| defaultOption | integer|null | – | Which option to take if nobody answers before the deadline, counted from 0. Give one whenever there is a safe assumption — it is what lets you carry on rather than stall. Omit it when no option is sa… |
| key | string | yes | Issue key, e.g. 'UK-1'. |
| options | array | yes | The answer options, in the order to offer them: at least 2, at most 8, each a short label rather than a paragraph. Fewer than two is not a question with options — that is a comment. |
| question | string | yes | The question itself. Keep it to what the options answer. |
| to | string | yes | Who to ask: the username, which list_users hands you ready-made — never the display name. They must be able to see this project, and it cannot be you. |
| ttlHours | integer|null | – | How long to wait, in hours. Omitted is 48 (two days). 0 means no deadline at all — the question waits until somebody answers it, which is rarely what an agent wants. |
No output schema declared.
No examples provided.
create_issue ~312
Create an issue in a project visible to this token. Returns the new issue key. Requires permission to create issues in that project. Answers with 'notified' (who this actually reaches) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land.
| Name | Type | Req | Description |
|---|---|---|---|
| assignee | string|null | – | Assignee username or email. Omit to leave unassigned. |
| description | string|null | – | Issue description. Markdown is kept as written, and carries $…$ / $$…$$ LaTeX formulas and [~username] mentions (the username, which list_users hands you ready-made — never the display name). |
| dueDate | string|null | – | The day this is due, as YYYY-MM-DD. A calendar day, not a timestamp — do not send a time or a zone. |
| labels | string|null | – | Labels to set, space or comma separated. |
| parentKey | string|null | – | Parent issue key, to create this as a child/sub-task. |
| priority | string|null | – | Priority name, e.g. 'High'. |
| projectKey | string | yes | Project key, e.g. 'UK'. |
| summary | string | yes | Issue summary (title). |
| type | string|null | – | Issue type name, e.g. 'Task', 'Bug', 'Story', 'Epic'. Defaults to 'Task'. |
No output schema declared.
No examples provided.
create_project ~426
Administrators only: create a project — a new key, a starter board, and its own wiki space, led by you unless you name someone else. The key is yours to choose and is never invented for you: one already taken is refused, naming the project holding it, rather than quietly becoming KEY2 — the key shows in every issue key, link and commit, and renaming it later costs more than creating the project did. Calling it again with the same key and name returns that same project with created:false, so a retry after a lost answer cannot make a second project. Deleting one is not offered here: that is a decision a person makes looking at what is inside. Who may: an administrator of this workspace, or — for a subproject — the lead of the parent, since it hands over their own project's people.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string|null | – | What the project is for. Markdown. |
| key | string | yes | Project key, 2–10 characters: a letter followed by letters or digits, e.g. 'BGS'. Uppercased. |
| lead | string|null | – | Username or email of the project lead. Defaults to you — a project with no lead is one nobody can configure: export, colour, the bgs connection and access grants all need a lead or an admin. |
| name | string | yes | Project name, e.g. 'Background agents'. |
| parentKey | string|null | – | Key of the project this one is a subproject of. Everybody who may reach the parent may reach this project too, in the role they hold there — so add only the people the parent does not already have. L… |
| projectTypeKey | string|null | – | Jira project type: 'software' (the default), 'business' or 'service_desk'. |
No output schema declared.
No examples provided.
create_project_rule ~809
Add a rule to a project: when an issue enters 'status', append 'template' to its description. A rule appends its checklist to an issue's description when the issue ENTERS the rule's state — from the board, the Jira API or update_issue alike. The block starts with a hidden marker line '[//]: # (pm-rule:<id>)'; while that line is in the description, entering the state again adds nothing (the journal says 'alreadyThere'). A [~username] in the template is a mention: that person is notified when the checklist lands. A checklist that would make the description too long is not added and the journal says 'tooLong'; the move itself still happens. A rule with action 'agent' is a DUTY instead: it says which issues may be handed to an agent role (agentRole, e.g. 'product') and what the agent may do with them. Its 'template' is then the INSTRUCTION — what doing such an issue means in this project — and nothing is appended anywhere. A duty may have no state (pass an empty 'status'): then an issue is handed only by a person. agentActions is a list from: describe, subtasks, ask, wiki, report, support. agentFields names the fields it may set: priority, labels, duedate, or the project's own fields by name. doneStatus is the state it moves the issue to when done — never a finished one. capUsd raises what one task may cost, up to 5 dollars. Commenting is always allowed; finishing, deleting, reassigning and anything outside the issue never are. Saving or switching on a duty makes it yours: it runs on your behalf and access, and is switched off if you lose the project. The state and the type are NAMES of this project's own (list_project_rules lists them); an unknown one is refused with the list. Project lead or admin only.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string|null | – | 'checklist' (the default) or 'agent' for a duty. Fixed once the rule exists. |
| agentActions | string|null | – | For a duty: what the agent may do beyond commenting, comma-separated — describe, subtasks, ask, wiki, report, support. |
| agentFields | string|null | – | For a duty: the fields it may set, comma-separated — priority, labels, duedate, or a project field's name. |
| agentRole | string|null | – | For a duty: the agent role's key, e.g. 'product'. |
| capUsd | number|null | – | For a duty: what one task may cost, in dollars, when more than the ordinary ceiling is needed. At most 5. |
| doneStatus | string|null | – | For a duty: the state it moves the issue to when done. Never a finished state. Leave out and it does not move the issue. |
| enabled | boolean | – | Whether the rule is on from the start. Default true. |
| label | string|null | – | Only issues carrying this label (one word). Leave out for any label. |
| name | string | yes | What the rule is called, e.g. 'Document pack'. At most 120 characters. |
| projectKey | string | yes | Project key, e.g. 'ONB'. |
| status | string | yes | The state whose ENTRY fires the rule, by name, e.g. 'Ready for review'. For a duty taken only by hand, an empty string. |
| template | string | yes | The checklist, as Markdown: a '### Heading' per group, '- [ ] item' per line, two spaces of indent to nest an item under another, and [~username] on an item to name who does it. For a duty: the instr… |
| type | string|null | – | Only issues of this type, by name, e.g. 'Bug'. Leave out for any type. |
No output schema declared.
No examples provided.
create_wiki_page ~359
Create a wiki page from Markdown in a space you can write to. Hangs off the space home page unless you name a parent (by 'parentId', or by 'parentTitle' within the same space). Returns the new page id and its URL. Mention someone as [@Their Name](user:username) — on a wiki page that is the form that notifies, not the [~username] used in issues; link another page as [text](page:Title) or [text](page:SPACE/Title). Answers with 'notified' (who this actually reaches) and 'unresolvedMentions' (what looked like a mention and reached nobody, each with a reason) — a wrong handle is stored as written and never refused, so that list is the only sign it did not land.
| Name | Type | Req | Description |
|---|---|---|---|
| labels | string|null | – | Labels to set, space or comma separated. |
| markdown | string|null | – | Page body as Markdown, which also carries $…$ / $$…$$ LaTeX formulas and the wiki's macros on a line of their own — {toc}, {children}, {info} … {info}, {expand:title=…} … {expand}. |
| parentId | integer|null | – | Parent page id. Omit to hang the page off the space home page. |
| parentTitle | string|null | – | Parent page title, as an alternative to 'parentId'. Must be a page in the same space. |
| spaceKey | string | yes | Space key, e.g. 'PM'. Every project has exactly one space, keyed like the project. |
| title | string | yes | Page title. Must be unique within the space — the title is how pages are addressed here. |
No output schema declared.
No examples provided.
decide_support_letter ~135
Decide what a held or failed letter to the support address is. 'release' files it as if it had just arrived, past the spam filter and the limits: it joins the request it proves it answers, or opens a new one (and the sender gets the usual acknowledgement). 'dismiss' says it is not a request; its files are dropped and the row is deleted with the other unfiled letters after 30 days. Requires full write access to the support project.
| Name | Type | Req | Description |
|---|---|---|---|
| decision | string | yes | 'release' or 'dismiss'. |
| letterId | integer | yes | The letter's id, from list_support_letters. |
No output schema declared.
No examples provided.
delete_agent_usage ~94
Remove one agent-usage record from an issue, by the id that get_agent_usage returns. For correcting a record's numbers, re-send it with report_agent_usage instead — the same source + externalId updates in place. Requires permission to edit the issue.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | Record id, as returned by get_agent_usage. |
| key | string | yes | Issue key, e.g. 'UK-1'. |
No output schema declared.
No examples provided.
delete_attachment ~99
Remove a file from an issue, by 'filename' or by attachment 'id' — both come back from get_issue. Requires permission to edit issues in that project.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string|null | – | File name to remove, as listed by get_issue. |
| id | integer|null | – | Attachment id, as listed by get_issue. An alternative to 'filename'. |
| key | string | yes | Issue key, e.g. 'UK-1'. |
No output schema declared.
No examples provided.
delete_project_field ~78
Remove a column from a project. Answers with how many issues lost a value, because that number is what the decision was about — the issues themselves are untouched. Project lead or admin only.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Field name, e.g. 'Provider'. |
| projectKey | string | yes | Project key, e.g. 'CRM'. |
No output schema declared.
No examples provided.
delete_project_rule ~92
Remove a project rule, by its id from list_project_rules. Checklists it already added stay in their issues; its journal goes with it. To stop it for a while instead, update_project_rule with enabled=false. Project lead or admin only.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The rule's id, from list_project_rules. |
| projectKey | string | yes | Project key, e.g. 'ONB'. |
No output schema declared.
No examples provided.
delete_wiki_attachment ~156
Remove a file from a wiki page, by its 'filename' as listed by get_wiki_page. Identify the page by 'pageId', or by 'spaceKey' + 'title'. References to it in the page body are left alone — they simply stop resolving, so tidy the body too if it named the file. Requires permission to edit the page.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | yes | File name to remove, as listed by get_wiki_page. |
| pageId | integer|null | – | Page id (as returned by search_wiki). |
| spaceKey | string|null | – | Space key, when identifying the page by title. |
| title | string|null | – | Exact page title, when identifying the page by title. |
No output schema declared.
No examples provided.
delete_wiki_page ~150
Delete a wiki page. Identify it by 'id', or by 'spaceKey' + 'title'. A page with children takes its whole subtree with it, so that is refused unless you pass includeChildren: true — the answer names what would go. The space home page can never be deleted. Requires permission to edit the wiki.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer|null | – | Page id (as returned by search_wiki). |
| includeChildren | boolean | – | Delete the page's descendants along with it. Off by default. |
| spaceKey | string|null | – | Space key, when identifying the page by title. |
| title | string|null | – | Exact page title, when identifying the page by title. |
No output schema declared.
No examples provided.
get_agent_usage ~91
What 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. A null metric means nobody reported it — which is not the same as zero, so 'reporting' says how many records carried each metric.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Issue key, e.g. 'UK-1'. |
No output schema declared.
No examples provided.
get_attachment ~135
Read one file attached to an issue — its bytes, base64-encoded — by the issue key and the 'filename' as get_issue lists it. The bytes travel as text through the conversation and cost roughly a third more than the file itself, so there is a size ceiling; the pm-files MCP server saves a file to a path instead, without spending the conversation on it (local_files_setup says how to connect it). Reading needs only permission to see the issue.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | yes | File name, as listed by get_issue. |
| key | string | yes | Issue key, e.g. 'UK-1'. |
No output schema declared.
No examples provided.
get_change ~85
The files one merge request, pull request or commit touches, with their diffs. Large diffs arrive cut.
| Name | Type | Req | Description |
|---|---|---|---|
| change | string | yes | The merge request or pull request number ('!12', '#12' or '12'), or a commit's hash. |
| repo | string|null | – | Which repository, as 'group/repo'. Omit when only one is open. |
No output schema declared.
No examples provided.
get_comments ~240
Read the discussion on an issue, oldest first. Without 'startAt' you get the END of the thread — the most recent 'limit' comments — because catching up means reading the latest, not the first ever written; 'earlier' says how many stand before the page you got, and 'startAt' walks back through them. Each 'body' comes back exactly as written, which is also the text update_comment's 'edits' are matched against. A reply carries 'replyTo', the id of the comment it answers (null otherwise) — pass the same id to add_comment's 'replyTo' to answer one. Comments that were deleted are not listed. Needs only permission to see the issue.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Issue key, e.g. 'UK-1'. |
| limit | integer | – | How many comments to return (default 20, max 100). |
| startAt | integer|null | – | Where to start, counted from the OLDEST comment as 0. Omit for the most recent page; pass 'startAt' - 'limit' from a previous answer to step back one page. |
No output schema declared.
No examples provided.
get_issue ~124
Get one issue by key (e.g. 'UK-1') if it is visible to this token, including its description, status, assignee, labels, sub-tasks, the issues it is linked to and the wiki pages linked to it. 'comments' is a COUNT, not the text — read the thread itself with get_comments whenever it is not zero: decisions, the map of what is attached and how to run the thing are often written there rather than in the description.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Issue key, e.g. 'UK-1'. |
No output schema declared.
No examples provided.
get_project_rule_runs ~244
A 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. The place to look when a checklist did not appear or an agent did not take an issue. Any member may read it.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The rule's id, from list_project_rules. |
| limit | integer | – | How many lines, newest first (default 20, max 100). |
| projectKey | string | yes | Project key, e.g. 'ONB'. |
No output schema declared.
No examples provided.
get_support_letter ~95
Read 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. 'letterId' comes from list_support_letters or from get_support_request's messages. A letter in a request is readable by whoever can read that issue; any other only by the support project's full members.
| Name | Type | Req | Description |
|---|---|---|---|
| letterId | integer | yes | The letter's id. |
No output schema declared.
No examples provided.
get_support_request ~175
Read 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). Every other comment on the issue is internal — the requester never sees it. Answers found=false for an issue that is not a support request.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Issue key of the request, e.g. 'SUPPORT-12'. |
No output schema declared.
No examples provided.
get_wiki_attachment ~224
Read 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. This is how a file is copied from one page to another: read it here, write it with add_wiki_attachment. The bytes travel as text through the conversation and cost roughly a third more than the file itself, so there is a size ceiling; for anything larger — or for putting the file on disk — the pm-files MCP server saves it to a path instead (local_files_setup says how to connect it). Reading needs only permission to see the page.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | yes | File name, as listed by get_wiki_page. |
| pageId | integer|null | – | Page id (as returned by search_wiki). |
| spaceKey | string|null | – | Space key, when identifying the page by title. |
| title | string|null | – | Exact page title, when identifying the page by title. |
No output schema declared.
No examples provided.
get_wiki_page ~490
Get one wiki page by id, or by space key + title, if it is visible to this token. Returns the page text, its labels, its parent and child pages, its comments, and the issues linked to it. Pass withMarkdown: true when you intend to edit it — you then get the page's Markdown source to change and hand back to update_wiki_page, and each comment's own Markdown, version and anchor for update_wiki_comment. A large page is read a part at a time: 'outline' lists its headings and how big each section is, then 'section' returns one of them (or 'offset'/'limit' a run of lines), and update_wiki_page's 'edits' changes just the words you mean without sending the page back.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer|null | – | Page id (as returned by search_wiki). |
| limit | integer|null | – | How many lines to return from 'offset' (default 200). |
| offset | integer|null | – | Return only the Markdown source from this 1-based line on — for a page without headings to navigate by. Pair with 'limit'. |
| outline | boolean | – | Return the page's table of contents instead of its body: per heading its level, text, anchor, the 1-based lines its section spans in the Markdown source, and its size in characters. Start here on a l… |
| section | string|null | – | Return only this section's Markdown — its heading line down to the next heading of the same or a higher level, subsections included. Name it by its anchor (as 'outline' gives it: the id a {toc} entry… |
| spaceKey | string|null | – | Space key, when looking the page up by title. |
| title | string|null | – | Exact page title, when looking the page up by title. |
| withMarkdown | boolean | – | Return the Markdown source ('markdown') instead of the plain text — what to edit and pass back to update_wiki_page, and, for each comment, to update_wiki_comment. Off by default: reading costs less a… |
| withRelated | boolean | – | With 'outline', 'section' or 'offset': also return the page's children, attachments, comments and linked issues, which a partial read otherwise leaves out. |
No output schema declared.
No examples provided.
link_issues ~282
Link two issues: link_issues('PM-419', 'PM-417', 'is blocked by') records that PM-419 is blocked by PM-417. 'type' is the PHRASE, said as a person says it — 'blocks', 'is blocked by', 'duplicates', 'is duplicated by', 'clones', 'relates to' — so the direction is in the words and the arguments cannot disagree; a bare type name ('Blocks') points outward, as it does in Jira. A phrase this workspace does not have is REFUSED and the ones it does have are named, rather than quietly becoming 'relates to'. The link then shows on both issues (get_issue returns 'links'), and linking the same pair the same way again changes nothing. Requires permission to edit BOTH issues — a link is a change to the issue at each end.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | yes | The issue the phrase is said about, e.g. 'PM-419'. |
| to | string | yes | The issue at the other end, e.g. 'PM-417'. |
| type | string | yes | How 'from' relates to 'to', in words: 'blocks', 'is blocked by', 'duplicates', 'clones', 'relates to'. Whatever this workspace's link types call themselves — a refusal lists them. |
No output schema declared.
No examples provided.
link_wiki_page ~186
Link a wiki page to an issue. The link then shows on both the issue and the page, and survives the page being renamed or moved. Identify the page by 'pageId', or by 'spaceKey' + 'title'. Linking the same page again updates that link instead of adding a second one. Requires permission to edit the issue.
| Name | Type | Req | Description |
|---|---|---|---|
| issueKey | string | yes | Issue key, e.g. 'UK-1'. |
| pageId | integer|null | – | Page id (as returned by search_wiki). |
| relationship | string|null | – | How the page relates to the issue, free text — e.g. 'documentation' (the default), 'specification', 'design'. |
| spaceKey | string|null | – | Space key, when identifying the page by title. |
| title | string|null | – | Exact page title, when identifying the page by title. |
No output schema declared.
No examples provided.
list_code ~104
List a directory of a repository connected to a project. Only repositories whose owners opened them to agents can be read.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string|null | – | Directory inside the repository. Omit for its root. |
| reference | string|null | – | Branch, tag or commit. Omit for the default branch. |
| repo | string|null | – | Which repository, as 'group/repo'. Its last segment alone is enough when unambiguous; omit it when only one is open. |
No output schema declared.
No examples provided.
list_credentials ~92
List the credentials attached to an issue or a wiki page that this token may read — names and who attached them, never the values. Pass issueKey or pageId. Use reveal_credential to read one value, and only when you are about to use it.
| Name | Type | Req | Description |
|---|---|---|---|
| issueKey | string|null | – | Issue key, e.g. 'UK-1'. |
| pageId | integer|null | – | Wiki page id. |
No output schema declared.
No examples provided.
list_issue_questions ~319
Questions 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. This is how you find out whether the question you asked has been answered — poll it, since ask_issue_question does not wait. With no 'key' the default is role='to_me'; with a 'key' it is every question on that issue. Open ones by default; pass state='all' for the answered, withdrawn and expired ones too.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string|null | – | 'agent' for only what an agent put to somebody (a resolution, PM-602), 'people' for only what a person asked. Omit for both. |
| key | string|null | – | Limit to one issue, e.g. 'UK-1'. Omit to look across every project this token can reach. |
| limit | integer | – | How many to return (default 20, max 100). |
| role | string|null | – | Whose questions: 'to_me' (waiting on you to answer), 'asked' (you asked them, and you are waiting), or 'any'. Defaults to 'to_me' with no key, and to 'any' when a key is given. |
| state | string|null | – | 'open' (the default — still waiting on somebody) or 'all', which adds the answered, the withdrawn and the expired (the deadline passed with no default and no answer). |
No output schema declared.
No examples provided.
list_mcp_connections ~48
List the external MCP connections configured for a project. Auth tokens are never returned (only whether one is set).
| Name | Type | Req | Description |
|---|---|---|---|
| projectKey | string | yes | Project key, e.g. 'UK'. |
No output schema declared.
No examples provided.
list_project_fields ~71
The columns a project keeps about its issues: name, kind, and a list's options with their colours. Also the customfield_… name each one answers to, for searching by JQL. Any member may read them.
| Name | Type | Req | Description |
|---|---|---|---|
| projectKey | string | yes | Project key, e.g. 'CRM'. |
No output schema declared.
No examples provided.
list_project_rules ~471
A project's rules: when an issue enters a state, a checklist from a template is appended to its description. A rule appends its checklist to an issue's description when the issue ENTERS the rule's state — from the board, the Jira API or update_issue alike. The block starts with a hidden marker line '[//]: # (pm-rule:<id>)'; while that line is in the description, entering the state again adds nothing (the journal says 'alreadyThere'). A [~username] in the template is a mention: that person is notified when the checklist lands. A checklist that would make the description too long is not added and the journal says 'tooLong'; the move itself still happens. A rule with action 'agent' is a DUTY instead: it says which issues may be handed to an agent role (agentRole, e.g. 'product') and what the agent may do with them. Its 'template' is then the INSTRUCTION — what doing such an issue means in this project — and nothing is appended anywhere. A duty may have no state (pass an empty 'status'): then an issue is handed only by a person. agentActions is a list from: describe, subtasks, ask, wiki, report, support. agentFields names the fields it may set: priority, labels, duedate, or the project's own fields by name. doneStatus is the state it moves the issue to when done — never a finished one. capUsd raises what one task may cost, up to 5 dollars. Commenting is always allowed; finishing, deleting, reassigning and anything outside the issue never are. Saving or switching on a duty makes it yours: it runs on your behalf and access, and is switched off if you lose the project. Answers with each rule's id (the other rule tools take it), action, state, conditions (type, label — null means any), template and whether it is on, and for a duty its 'agent' part; with the state and type names a rule may use, the agent roles, actions and fields a duty may name where agents are on; and 'canEdit'. Any member may read them.
| Name | Type | Req | Description |
|---|---|---|---|
| projectKey | string | yes | Project key, e.g. 'ONB'. |
No output schema declared.
No examples provided.
list_projects ~59
List the projects visible to this token (a project-scoped token sees only its project). A project with a 'parent' is a subproject of that one: it has its own issues, board and wiki, and shares only who may reach it.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_support_letters ~159
List 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'. Without 'state', held and failed — the ones waiting for a person. Each has an id, the reason, the sender, the subject and the file names. Only a full member of the support project may read them: they are strangers' words.
| Name | Type | Req | Description |
|---|---|---|---|
| state | string|null | – | One of 'held', 'failed', 'ignored', 'dismissed'. Omit for held and failed. |
No output schema declared.
No examples provided.
list_support_queue ~278
The support desk's queue: open requests, the most urgent first — overdue, then due soonest, then those waiting on their requester. Each item says whose turn it is ('clock.turn': 'first' = nobody has answered yet, 'reply' = the requester wrote again, 'requester' = we answered last and the clock is stopped), since when it has waited, the working hours waited, when the answer is due and whether it is 'onTime', 'dueSoon' or 'overdue'; plus the assignee. 'numbers' has the current counts and, over the last 30 days, the median time to a first human answer and to resolution (in working hours — weekdays only) and the share answered within the promise. An automatic acknowledgement or automatic answer is never counted as an answer; 'numbers.auto' says how many requests the automatic answer got, how many were then resolved with no human reply and no further word from the requester ('settled'), and how many requesters wrote again after it ('askedAgain') — per rule too. An item's 'autoRule' is set when the request got an automatic answer. Readable by anybody who can read the support project.
| Name | Type | Req | Description |
|---|---|---|---|
| who | string|null | – | 'all' (default), 'mine' (assigned to you) or 'unassigned'. |
No output schema declared.
No examples provided.
list_tracks ~106
The 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. A track has no key of its own; its issues keep the project's key, which is what makes it a different thing from a subproject (a separate project, see create_project's parentKey). Any member may read them.
| Name | Type | Req | Description |
|---|---|---|---|
| projectKey | string | yes | Project key, e.g. 'TH'. |
No output schema declared.
No examples provided.
list_users ~174
List the people you can assign work to or mention: the members of the projects this token can see. Optionally filter by free text (username, display name or email) or narrow to one project. Mention someone in a description or comment as [~username] — a mention matches the username, never the display name — and pass the same username (or the email) as 'assignee'.
| Name | Type | Req | Description |
|---|---|---|---|
| includeInactive | boolean | – | Include deactivated accounts, which can be neither assigned nor mentioned. Off by default. |
| limit | integer | – | Max users to return (default 50, max 200). |
| projectKey | string|null | – | Restrict to members of this project key (must be visible to the token). |
| text | string|null | – | Free text to match in username, display name or email. |
No output schema declared.
No examples provided.
What is the Kaiku MCP server?
Kaiku is an MCP server listed in the public MCP registry as tech.kaiku/kaiku. Issue tracker and wiki for teams and their agents: find, file and update issues, write pages. This page covers its hosted endpoint (https://mcp.kaiku.tech/mcp).
Is the Kaiku MCP server safe to use?
Kaiku scores 74 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Kaiku MCP server expose?
Kaiku exposes 74 tools: add_attachment, add_comment, add_wiki_attachment, add_wiki_comment, admin_bank_transfer, and 69 more. Their descriptions and schemas cost roughly 18,469 tokens of context every time the server is loaded.
Does the Kaiku MCP server require authentication?
Yes. Kaiku asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Kaiku MCP server still maintained?
Kaiku is still listed as active in the MCP registry. We last reached this channel on 23 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.