Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://app.kaiku.tech
Authorization not required, issuer https://app.kaiku.tech
Authorization required, Bearer, issuer https://app.kaiku.tech
Authorization not required, issuer https://app.kaiku.tech
Recently observed → Live
Live → Recently observed
Added "create_credential", "delete_credential" and "update_credential" (89 tools before, 92 now)
Attach a secret — a password, a key, a test login — to an issue or a wiki page, instead of writing it in a comment or a description, where everyone on the project reads it for ever. Pass issueKey or pageId, and a 'name' saying what it is. It can be read by the person whose token this is, by the people in 'readers', and by the project's lead, who reads every secret in the project — and by nobody else, however much of the issue they can see. The answer lists them in 'readableBy': say that to the person rather than 'only you'. There are two ways to give the value. WITHOUT 'value' nothing is stor…
Remove a credential, by the id from list_credentials — the value, its reader list and the record of who read it go with it, and it cannot be brought back. Only the person who attached it and the project's lead may. To take one person's access away, use update_credential's 'readers' instead.
Change a credential, by the id from list_credentials: its name, its value, or who may read it — each on its own, and only what you pass is touched, so taking somebody off the list never needs the value. 'readers' REPLACES the list; noReaders: true empties it. Only the person who attached it and the project's lead may change one: being shown a secret is not being given it to pass on. The answer never carries the value. Do not repeat the value in any text you write — a comment, a description, a merge request, a log.
Added "create_version", "list_versions", "release_version" and 1 more; changed the definition of "create_issue", "report_deployment" and "update_issue" (85 tools before, 89 now)
⟨79 unchanged words⟩ "type":["string","null"]},"fixVersions":{"default":null,"description":"The versions of the project this goes out in, by name, comma-separated: '2.4.0' or '2.4.0, 2.4.1' — the names list_versions gives. A name the project does not have refuses the filing and lists the ones it has.","type":["string","null"]},"labels":{"default":null,"description":"Labels ⟨166 unchanged words⟩
⟨40 unchanged words⟩ "type":["string","null"]},"fromLast":{"default":false,"description":"True to start the range at the revision the last deployment to this environment was reported at, instead of naming 'from'. The first report to an environment then reads no range.","type":"boolean"},"
Authorization not required, issuer https://app.kaiku.tech
Added "list_environments", "report_deployment" and "set_environments"; changed the definition of "create_project_rule", "list_project_rules" and "update_project_rule" (82 tools before, 85 now)
⟨153 unchanged words⟩ was taken into work — the parent again); or what the project's repository said through its webhook: 'branchCreated' (a branch naming the issue was made), 'mrOpened', 'mrMerged' or 'mrClosed' (a merge request — a pull request on GitHub — naming the issue was opened, merged, or closed without merging). An issue is named by its key in the branch, the title or the description, and only this project's issues are touched. 'branch' narrows the three merge-request events to a request going INTO that branch, e.g. 'main'. Nobody is behind a webhook, so such a rule acts as whoever last saved or switched it on, whatever its action. 'deployed' fires when a pipeline reports that the issue went out to an environment (report_deployment); 'environment' narrows it to one of the project's environments by name, e.g. 'staging'. Only 'entered' has a 'status'; pass an empty ⟨330 unchanged words⟩
⟨91 unchanged words⟩ Changed the definition of "create_project_rule", "list_project_rules", "search_issues" and 1 more
⟨104 unchanged words⟩ journal says 'tooLong'; the move itself still happens. 'trigger' says WHEN: 'entered' (the default — the issue entered 'status'), 'versionReleased' (a version it goes out in was marked released), 'subtasksDone' (every issue under it is finished — the rule acts on the PARENT) or 'subtaskStarted' (an issue under it was taken into work — the parent again). Only 'entered' has a 'status'; pass an empty one for the others. 'fromStatus' narrows any of them to an issue coming from that state: the state it has just left for 'entered', the state it stands in for the rest. A rule with action 'move' MOVES the issue to 'moveToStatus' instead of appending anything, and has no template (pass an empty one). The move is an ordinary one — made as whoever last saved or switched on the rule, asked of the project's workflow, written to the history with the rule's name, and followed by the rules of the state it lands in. A workflow that refuses it leaves a 'moveRefused' line with the reason in the journal and nothing else; 'moved' is a move made; 'tooDeep' is a move not made because rules had already moved issues three times off one event. A rule with action 'agent' is a DUTY ⟨186 unchanged words⟩
Authorization required, Bearer, issuer https://app.kaiku.tech
Authorization required, Bearer, issuer https://app.kaiku.tech
Authorization not required, issuer https://app.kaiku.tech
Added "list_legal_library" and "search_legal_library" (80 tools before, 82 now)
List the acts in the legal library — what this installation's agents have already read off the official sites: url, title, the day the text is as of (fetched_at), when the site last confirmed it (checked_at) and its length. Open where the company lets an agent role read laws.
Search the laws, regulations and standards this installation's agents have already read off the official sites (EUR-Lex, legislation.gov.uk, Fedlex, FATF and others) — by words and by meaning. Not a web search. Each hit: the act's url, title, the day its text is as of, an offset into the text and a snippet around the match. Open where the company lets an agent role read laws.
Authorization required, Bearer, issuer https://app.kaiku.tech
Authorization not required, issuer https://app.kaiku.tech
Authorization required, Bearer, issuer https://app.kaiku.tech
Recently observed → Live
Live → Recently observed
Added "check_checklist_item" and "get_checklist"; changed the definition of "create_issue" (78 tools before, 80 now)
⟨93 unchanged words⟩ "type":["string","null"]},"order":{"default":null,"description":"Its place among its parent's children: 1, 2, 3… — the order they are to be done in. Children with a place come first, in it; the rest after, by number. Filing a template's sub-tasks, pass 1, 2, 3… in turn.","type":["integer","null"]},"parentKey":{"default":null,"description":"Parent ⟨104 unchanged words⟩
Tick or untick one checklist item by the 'id' get_checklist gave it. Written as a click on the item is: the same history line and the same notices to the issue's watchers, in your name — and only the item's box changes, so an edit somebody is saving to the description at the same moment is never lost. Ticking a ticked item changes nothing ('changed' false). An id that finds nothing means the item was rewritten or removed: read the checklist again. Requires permission to edit the issue.
Changed the definition of "create_issue" and "search_issues"
⟨135 unchanged words⟩ (title).","type":"string"},"teamRole":{"default":null,"description":"The project's team role this issue is for, by name, e.g. 'Звуковик' — one of the roles its administrators keep. With no assignee given, the issue goes to the person who has held that role longest.","type":["string","null"]},"type":{"default":null,"description":"Issue ⟨18 unchanged words⟩
⟨37 unchanged words⟩ parent, epic, labels, archived, agent, teamRole, text, created, updated, duedate. OPERATORS: = ⟨86 unchanged words⟩ functions, so compute the date yourself. Theonly function
Certificate recorded, valid to 2026-11-21
Authorization required, Bearer, issuer https://app.kaiku.tech
Authorization not required, issuer https://app.kaiku.tech
https://app.kaiku.tech/mcp (mcp_streamable_http) — from mcp_registry
Added "get_started" (77 tools before, 78 now)
What this company and one of its projects could still set up in the tracker, and what is set up already — call it when the person has just started or asks what else the tracker can do. Each step has 'id', 'scope' ('company' or 'project'), 'done', 'why' (one sentence) and 'how': the next move, either an MCP 'tool' with example 'args' to call, or a 'url' of the screen to open when the step needs a token, a key or a browser — never ask for such a secret in the chat. Steps not yet done come first. Only steps the caller may take are listed: the ones that need the project's lead or the company's ow…
Authorization not required, issuer https://app.kaiku.tech
Recently observed → Live
Live → Recently observed
Changed the definition of "site_traffic"
⟨20 unchanged words⟩ query, page, country, device or date)or, Vercel Web Analytics (visitors and page views by page, referrer, source, country, device or date) or Google Analytics 4 (sessions, active users, page views, engaged sessions and key events by source, channel, landing page, country, device or date). Only connections ⟨33 unchanged words⟩
⟨8 unchanged words⟩ query, page, country, device, date, referrer, source orsource.channel. Omit for totals only.","type":[" ⟨38 unchanged words⟩ pages whose address contains this (Search Console)
Added "site_traffic" (76 tools before, 77 now)
How a project's website was visited, from the service that counts it: Google Search Console (clicks, impressions, ctr, position by query, page, country, device or date) or Vercel Web Analytics (visitors and page views by page, referrer, source, country, device or date). Only connections opened to agents are read. The totals are the site's — rows of a breakdown do not add up to them — and the answer's period and notes say what was actually counted.
Recently observed → Live
Live → Recently observed
Added "delete_project_issue_type" and "set_project_issue_type"; changed the definition of "set_project_field" (74 tools before, 76 now)
⟨43 unchanged words⟩ "type":["string","null"]},"issueType":{"default":null,"description":"Keep the field for issues of one type only, by name — e.g. 'Показ' — or '' for every type. Leave out to keep it as it is.","type":["string","null"]},"kind":{"default":null,"description":"What it holds: 'text', 'number', 'date' (a day), 'datetime' (a day and a time, written like 2026-10-01T19:30+03:00), 'user', 'select' (a list) or 'country' ⟨169 unchanged words⟩
Remove an issue type of this project's own. Refused while any issue is of it or any field is kept for it — change those first; a rule on it goes with it. Project lead or admin only.
Recently observed → Live
Certificate recorded, valid to 2026-11-21
Authorization not required
Added "local_files_setup"; changed the definition of "add_attachment", "add_wiki_attachment", "get_attachment" and 1 more (73 tools before, 74 now)
⟨37 unchanged words⟩ , 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 ⟨5 unchanged words⟩
⟨50 unchanged words⟩ 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
Live → Recently observed
Unknown → Live
First tool surface recorded: 73 tools (server version 1.1.0)
https://{workspace}.kaiku.tech/mcp (mcp_streamable_http) — from mcp_registry, with the record
https://mcp.kaiku.tech/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 44 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨8 unchanged words⟩ assignee, priority, labels, dueDate, parentKey, fixVersions, or status (which performs the transition, and ⟨145 unchanged words⟩
⟨215 unchanged words⟩ "type":["string","null"]},"fixVersions":{"default":null,"description":"The versions of the project this goes out in, by name, comma-separated: '2.4.0, 2.4.1'. REPLACES the set — to add one, send the ones it has (get_issue's 'fixVersions') with the new one. Pass an empty string to take it out of every version. A name the project does not have refuses the update and lists the ones it has.","type":["string","null"]},"key":{"description":"Issue key, e.g. ⟨193 unchanged words⟩
Add a version to a project, at the end of its sequence. A version is what a project's work goes out in — '2.4.0', 'Autumn'. It is the project's own: an issue carries versions of its own project only, any number of them ('fixVersions' on create_issue, update_issue and get_issue; JQL 'fixVersion = "2.4.0"', 'fixVersion in unreleasedVersions()'). The name is unique in its project, whatever the case. Answers with the version as list_versions gives it. Releasing it is release_version's. Project lead or admin only.
A project's versions, in their sequence. A version is what a project's work goes out in — '2.4.0', 'Autumn'. It is the project's own: an issue carries versions of its own project only, any number of them ('fixVersions' on create_issue, update_issue and get_issue; JQL 'fixVersion = "2.4.0"', 'fixVersion in unreleasedVersions()'). Each with its id, name, description, startDate and releaseDate (YYYY-MM-DD), whether it is released or archived (put away: still on its issues, no longer offered), 'overdue' (its day has passed and it has not shipped), and how many issues it carries — 'issues' — and h…
Mark a version released — or, with released=false, take the mark back. A version is what a project's work goes out in — '2.4.0', 'Autumn'. It is the project's own: an issue carries versions of its own project only, any number of them ('fixVersions' on create_issue, update_issue and get_issue; JQL 'fixVersion = "2.4.0"', 'fixVersion in unreleasedVersions()'). Releasing runs the project's rules that wait for a version to ship (list_project_rules, trigger 'versionReleased') on the issues it carries, and tells the project's webhooks. It does NOT refuse a version that still carries unfinished issu…
Change a version: its name, description, days, or whether it is archived. Only what you pass is changed. A version is what a project's work goes out in — '2.4.0', 'Autumn'. It is the project's own: an issue carries versions of its own project only, any number of them ('fixVersions' on create_issue, update_issue and get_issue; JQL 'fixVersion = "2.4.0"', 'fixVersion in unreleasedVersions()'). An issue that carries the version goes on carrying it under a new name. Archiving puts it away — still on its issues, no longer offered for new ones — and is undone the same way. Releasing is release_vers…
⟨156 unchanged words⟩ was taken into work — the parent again); or what the project's repository said through its webhook: 'branchCreated' (a branch naming the issue was made), 'mrOpened', 'mrMerged' or 'mrClosed' (a merge request — a pull request on GitHub — naming the issue was opened, merged, or closed without merging). An issue is named by its key in the branch, the title or the description, and only this project's issues are touched. 'branch' narrows the three merge-request events to a request going INTO that branch, e.g. 'main'. Nobody is behind a webhook, so such a rule acts as whoever last saved or switched it on, whatever its action. 'deployed' fires when a pipeline reports that the issue went out to an environment (report_deployment); 'environment' narrows it to one of the project's environments by name, e.g. 'staging'. Only 'entered' has a 'status'; pass an empty ⟨314 unchanged words⟩ trigger, state, conditions (type, label, fromStatus, branch — null means any), template, moveToStatus ⟨48 unchanged words⟩
⟨37 unchanged words⟩ or 'label' removes that condition; an empty 'fromStatus' or 'branch' removes that one too; for a duty, an ⟨151 unchanged words⟩ was taken into work — the parent again); or what the project's repository said through its webhook: 'branchCreated' (a branch naming the issue was made), 'mrOpened', 'mrMerged' or 'mrClosed' (a merge request — a pull request on GitHub — naming the issue was opened, merged, or closed without merging). An issue is named by its key in the branch, the title or the description, and only this project's issues are touched. 'branch' narrows the three merge-request events to a request going INTO that branch, e.g. 'main'. Nobody is behind a webhook, so such a rule acts as whoever last saved or switched it on, whatever its action. 'deployed' fires when a pipeline reports that the issue went out to an environment (report_deployment); 'environment' narrows it to one of the project's environments by name, e.g. 'staging'. Only 'entered' has a 'status'; pass an empty ⟨307 unchanged words⟩
⟨47 unchanged words⟩ "type":["string","null"]},"branch":{"default":null,"description":"For a merge-request event: only a request going into this branch. An empty string means into any.","type":["string","null"]},"capUsd":{"default":null,"description":"For ⟨61 unchanged words⟩ "type":["boolean","null"]},"environment":{"default":null,"description":"For 'deployed': only a deployment to this environment, by name. An empty string means to any.","type":["string","null"]},"fromStatus":{"default":null,"description":"Only ⟨135 unchanged words⟩ WHEN the rule fires: 'entered', 'versionReleased', 'subtasksDone', 'subtaskStarted', 'branchCreated', 'mrOpened', 'mrMerged', 'mrClosed' or'subtaskStarted'.'deployed'. Moving off 'entered' drops the rule's state.", ⟨28 unchanged words⟩
A project's environments, in order, and its ten newest deployments. An environment is one of the places a project's work is put out to — 'dev', 'staging', 'prod' — in order; the LAST one is where finished work ends up. A deployment is a pipeline saying «this went out, there». Each issue it carried then says where it lies ('deployedTo' on get_issue), gets one history line per environment, and the project's rules with trigger 'deployed' run on it. Also 'canEdit' (you may change the list) and 'canReport' (you may report a deployment). Any member may read them.
Say that something was deployed to one of a project's environments — the call a pipeline step makes. An environment is one of the places a project's work is put out to — 'dev', 'staging', 'prod' — in order; the LAST one is where finished work ends up. A deployment is a pipeline saying «this went out, there». Each issue it carried then says where it lies ('deployedTo' on get_issue), gets one history line per environment, and the project's rules with trigger 'deployed' run on it. Name the issues it carried in 'issues', or give 'from' and 'to' — two revisions — and the keys are read off the mess…
Make a project's environments exactly this list, in this order — the last is where finished work ends up. An environment is one of the places a project's work is put out to — 'dev', 'staging', 'prod' — in order; the LAST one is where finished work ends up. A deployment is a pipeline saying «this went out, there». Each issue it carried then says where it lies ('deployedTo' on get_issue), gets one history line per environment, and the project's rules with trigger 'deployed' run on it. A name the project already has is kept as it is, with what was deployed there; a name it does not have is added…
⟨107 unchanged words⟩ journal says 'tooLong'; the move itself still happens. 'trigger' says WHEN: 'entered' (the default — the issue entered 'status'), 'versionReleased' (a version it goes out in was marked released), 'subtasksDone' (every issue under it is finished — the rule acts on the PARENT) or 'subtaskStarted' (an issue under it was taken into work — the parent again). Only 'entered' has a 'status'; pass an empty one for the others. 'fromStatus' narrows any of them to an issue coming from that state: the state it has just left for 'entered', the state it stands in for the rest. A rule with action 'move' MOVES the issue to 'moveToStatus' instead of appending anything, and has no template (pass an empty one). The move is an ordinary one — made as whoever last saved or switched on the rule, asked of the project's workflow, written to the history with the rule's name, and followed by the rules of the state it lands in. A workflow that refuses it leaves a 'moveRefused' line with the reason in the journal and nothing else; 'moved' is a move made; 'tooDeep' is a move not made because rules had already moved issues three times off one event. A rule with action 'agent' is a DUTY instead: it says which ⟨160 unchanged words⟩ other rule tools take it), action, trigger, state, conditions (type, label, fromStatus — null means any), template, moveToStatus and whether it is on, and for a duty its 'agent' part; with the state and type names, the triggers and the actions a rule may use, the agent roles, ⟨18 unchanged words⟩
⟨38 unchanged words⟩ epic, labels, archived, agent, teamRole, fixVersion, fixVersions, text, created, updated, duedate. OPERATORS: = ⟨92 unchanged words⟩ The functions are currentUser(), for assignee/reporter/creator, myTeamRoles(), for teamRole, andmyTeamRolesreleasedVersions() / unreleasedVersions(), forteamRole.fixVersion. `archived` is this tracker's own field: archived ⟨164 unchanged words⟩ of their role that fell to somebody else. `fixVersion` is the project version an issue goes out in, by name or id — `fixVersion = \"2.4.0\"`; an issue may be in several, so `=` means «is in». `fixVersion in unreleasedVersions()` is what is still to ship, `fixVersion in releasedVersions(PM)` what one project has shipped, `fixVersion IS EMPTY` work in no version. Quote values containing spaces. Seeded values — status ⟨159 unchanged words⟩
⟨34 unchanged words⟩ string for 'type' or 'label' removes that condition; an empty 'fromStatus' removes that one too; for a duty, an empty 'status', 'agentActions', ⟨99 unchanged words⟩ journal says 'tooLong'; the move itself still happens. 'trigger' says WHEN: 'entered' (the default — the issue entered 'status'), 'versionReleased' (a version it goes out in was marked released), 'subtasksDone' (every issue under it is finished — the rule acts on the PARENT) or 'subtaskStarted' (an issue under it was taken into work — the parent again). Only 'entered' has a 'status'; pass an empty one for the others. 'fromStatus' narrows any of them to an issue coming from that state: the state it has just left for 'entered', the state it stands in for the rest. A rule with action 'move' MOVES the issue to 'moveToStatus' instead of appending anything, and has no template (pass an empty one). The move is an ordinary one — made as whoever last saved or switched on the rule, asked of the project's workflow, written to the history with the rule's name, and followed by the rules of the state it lands in. A workflow that refuses it leaves a 'moveRefused' line with the reason in the journal and nothing else; 'moved' is a move made; 'tooDeep' is a move not made because rules had already moved issues three times off one event. A rule with action 'agent' is a DUTY ⟨163 unchanged words⟩
⟨116 unchanged words⟩ "type":["boolean","null"]},"fromStatus":{"default":null,"description":"Only an issue coming from this state, by name. An empty string means from any.","type":["string","null"]},"id":{"description":"The rule's id, ⟨19 unchanged words⟩ "type":["string","null"]},"moveToStatus":{"default":null,"description":"For a 'move' rule: a new state to move the issue to, by name.","type":["string","null"]},"name":{"default":null,"description":"A ⟨50 unchanged words⟩ on; checklists already added stay as they are.","type":["string","null"]},"trigger":{"default":null,"description":"WHEN the rule fires: 'entered', 'versionReleased', 'subtasksDone' or 'subtaskStarted'. Moving off 'entered' drops the rule's state.","type":["string","null"]} ⟨25 unchanged words⟩
Read an issue's checklist — the '- [ ]' lines of its description — as items, in order: each with a stable 'id' (pass it to check_checklist_item), 'checked', its words ('text', without reminder or picture), its 'depth' when nested, its 'reminder' ('YYYY-MM-DD HH:MM' or null) and its 'picture' — the attachment it shows of how the item should look, with the 'content' address its bytes are read at with this same token, or null. Needs only permission to see the issue.
Add an issue type of this project's own — e.g. 'Показ' — or rename one it already has. Keyed by name. The shared types (Epic, Story, Task, Bug, Sub-task, Client) are every project's and cannot be renamed here. Another project never sees this type. Project lead or admin only.
⟨56 unchanged words⟩ path instead, without spending the conversation onit.it (local_files_setup says how to connect it). Reading needs only permission to see the issue.
⟨88 unchanged words⟩ pm-files MCP server saves it to a pathinstead.instead (local_files_setup says how to connect it). Reading needs only permission to see the page.
How 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. Call it when you need a local file (a screenshot, a document, anything past the base64 ceiling) and pm-files is not among your tools: hand the person the command for their client, with this workspace's address already in it. It never contains a token, and you must never ask for one — the command takes it from the person's clipboard. Changes nothing.