
Real coding-agent sessions: what worked, where agents failed and what the human did about it.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
After the user chooses a task to continue, attach the actual current session to it. Use the client and session ID from the local plugin context, never guess IDs. Pass continues: the session_id (from get_task_context) of the session you are continuing, usually the latest one you read; your session then goes on in that session's draft, so one Build shows the work of both agents. This records a private link; it does not upload or publish history.
The session_id of the task's session you are continuing, from get_task_context sources.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
After the user chooses a task to continue, attach the actual current session to it. Use the client and session ID from the local plugin context, never guess IDs. Pass continues: the session_id (from get_task_context) of the session you are continuing, usually the latest one you read; your session then goes on in that session's draft, so one Build shows the work of both agents. This records a private link; it does not upload or publish history.
| Argument | Type | Description |
|---|---|---|
| client* | string | |
| task_id* | string | |
| continues | string | The session_id of the task's session you are continuing, from get_task_context sources. |
| session_id* | string |
{
"type": "object",
"required": [
"task_id",
"client",
"session_id"
],
"properties": {
"client": {
"enum": [
"claude_plugin",
"codex_plugin",
"pi_plugin",
"cursor_plugin",
"antigravity_plugin"
],
"type": "string"
},
"task_id": {
"type": "string"
},
"continues": {
"type": "string",
"description": "The session_id of the task's session you are continuing, from get_task_context sources."
},
"session_id": {
"type": "string"
}
}
}KeepPlain library: find moments where coding agents failed on a similar problem and what the human did about it. Use after two or three failed attempts at the same problem. Query: the symptom or error message in a few words, without paths or secrets.
| Argument | Type | Description |
|---|---|---|
| query* | string | The symptom or error message in a few words, e.g. "hydration mismatch after upgrade". No paths, secrets or code. |
| space | string | Optional. "all" (default): the user's own unpublished sessions first (two at most), then their team's, if the token belongs to a team, then the community's. "mine", "team" or "community": only those. |
| stack | string | Optional. The stack, e.g. "laravel" or "nextjs, prisma" (up to 5, comma-separated). |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "The symptom or error message in a few words, e.g. \"hydration mismatch after upgrade\". No paths, secrets or code."
},
"space": {
"enum": [
"all",
"mine",
"team",
"community"
],
"type": "string",
"description": "Optional. \"all\" (default): the user's own unpublished sessions first (two at most), then their team's, if the token belongs to a team, then the community's. \"mine\", \"team\" or \"community\": only those."
},
"stack": {
"type": "string",
"description": "Optional. The stack, e.g. \"laravel\" or \"nextjs, prisma\" (up to 5, comma-separated)."
}
}
}KeepPlain: step 2 of sending the current coding session, after the KeepPlain skill's upload step put it at the link from start_session_upload. Makes a private draft (or the team's, as the preview said) and returns its link. Nothing is published: the user reviews the draft on KeepPlain.
| Argument | Type | Description |
|---|---|---|
| upload_id* | string | The upload_id start_session_upload returned. |
{
"type": "object",
"required": [
"upload_id"
],
"properties": {
"upload_id": {
"type": "string",
"description": "The upload_id start_session_upload returned."
}
}
}KeepPlain library: read one published session found with search_coding_agent_sessions or find_coding_agent_failures. detail "brief" (default): the goal, the first prompt, the outcome, the whole verdict and the numbers. detail "moments": every moment in order, with the prompts that worked, where the agent failed and why the human stepped in.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The session's slug (or its KeepPlain link) from search_coding_agent_sessions or find_coding_agent_failures. |
| space | string | Optional. "all" (default): the user's own unpublished sessions first (two at most), then their team's, if the token belongs to a team, then the community's. "mine", "team" or "community": only those. |
| detail | string | "brief" (default, about 500 tokens) or "moments" (about 1,500 tokens). |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The session's slug (or its KeepPlain link) from search_coding_agent_sessions or find_coding_agent_failures."
},
"space": {
"enum": [
"all",
"mine",
"team",
"community"
],
"type": "string",
"description": "Optional. \"all\" (default): the user's own unpublished sessions first (two at most), then their team's, if the token belongs to a team, then the community's. \"mine\", \"team\" or \"community\": only those."
},
"detail": {
"enum": [
"brief",
"moments"
],
"type": "string",
"description": "\"brief\" (default, about 500 tokens) or \"moments\" (about 1,500 tokens)."
}
}
}Read more turns from an accessible private work session. Use session_id returned by get_task_context and cursor to page through the source, or a matched session's excerpt from search_my_work: its cursor, limit 1 and its text_offset read the passage found and on from it.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | integer | |
| session_id* | string | |
| text_offset | integer | For a long message, repeat its cursor with limit 1 and the returned next_text_offset. |
{
"type": "object",
"required": [
"session_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1
},
"cursor": {
"type": "integer",
"minimum": 0
},
"session_id": {
"type": "string"
},
"text_offset": {
"type": "integer",
"minimum": 0,
"description": "For a long message, repeat its cursor with limit 1 and the returned next_text_offset."
}
}
}Read private task context after selecting a task. Returns source excerpts without a paid summary call. Check the actual checkout before continuing. Fetch more session turns if excerpts are insufficient.
| Argument | Type | Description |
|---|---|---|
| cursor | string | |
| task_id* | string | |
| max_chars | integer |
{
"type": "object",
"required": [
"task_id"
],
"properties": {
"cursor": {
"type": "string"
},
"task_id": {
"type": "string"
},
"max_chars": {
"type": "integer",
"maximum": 24000,
"minimum": 1000
}
}
}Your team's pieces of work on KeepPlain, grouped from its members' agent sessions: title, task number, project, when it was last worked on, and its latest sessions (open one with get_coding_agent_session). Use when picking up work a teammate started, or to see what is going on in a project. Only for tokens of a team member.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many tasks, 1 to 20. Default 10. |
| status | string | Optional. "open" (default), "done" or "all". |
| project | string | Optional. A project's name as the team's lists show it, usually the repository's folder, e.g. "shop". |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "How many tasks, 1 to 20. Default 10."
},
"status": {
"enum": [
"open",
"done",
"all"
],
"type": "string",
"description": "Optional. \"open\" (default), \"done\" or \"all\"."
},
"project": {
"type": "string",
"description": "Optional. A project's name as the team's lists show it, usually the repository's folder, e.g. \"shop\"."
}
}
}KeepPlain library: find published sessions where developers did a similar task with a coding agent. Use before a non-trivial task on a known stack, or when the user asks how others did something; skip small edits and questions about this repository. Returns up to 5 cards with the outcome, how long it took and how often the human had to step in. Query: the task in a few words, e.g. "migrate queues to horizon". An empty result means nobody has published such a session yet.
| Argument | Type | Description |
|---|---|---|
| task | string | Optional, your team's sessions only: those of one task, by its title or task number (list_team_tasks shows them). |
| agent | string | Optional. Only sessions of this coding agent. |
| limit | integer | How many sessions, 1 to 5. Default 3. |
| query* | string | The task in a few words, e.g. "migrate queues to horizon". No code, file paths, repository or company names. |
| space | string | Optional. "all" (default): the user's own unpublished sessions first (two at most), then their team's, if the token belongs to a team, then the community's. "mine", "team" or "community": only those. |
| stack | string | Optional. The stack, e.g. "laravel" or "nextjs, prisma" (up to 5, comma-separated). |
Find your own or team tasks, and where in their sessions the words are. For continuing work, get the current repository key from the local plugin at query time and search that project first. Query: two to four key words of the work. Russian and English word forms match ("выпускал сертификат", "issued certificates"), translations do not: session titles are in English, so add the English terms to the user's words. Tasks come best match first (a title match outranks a word in a session, words found together outrank scattered ones), newest among equals. matched_sessions names the sessions the words were found in; a session's excerpt quotes the passage, and its cursor and text_offset go straight to get_session_excerpt. words_matched all_but_one: no task held every word, these miss one; none: the query held only stop words, the tasks are the newest. Why was this changed, or where did this code come from: pass paths (repository-relative, as git names them) or a commit sha from git blame or log, with agent_sessions, the values of that commit's Agent-Session trailer, and subject, the first line of its message; query may then be empty. A commit or a trailer finds its sessions in every repository (scope all), since an agent may have committed in another repository than its folder's: found_by says how, agent_session (the trailer names it), commit (its memory holds it) or team_commit (the team's repository puts it to it). Each matched session's change then gives the turn (cursor) where it changed the file or made the commit, and request, the person's last real request before it (short replies such as "yes" skipped): read from request.cursor to cursor with get_session_excerpt. own: true when the session made the change itself (its agent's edit or a git commit it ran), false when it only saw it in its git snapshots, as another session working in the same folder does; those that made it come first. found_by agent_session without a cursor: the trailer alone, which the hook writes into a commit made by hand too, for every session whose edits it holds, so it is not own; own comes from the session's git commit of that title (give subject) or its own edits of paths. op outside on a commit: the commit was made outside the session (by hand, a client's button) of files its agent edited; cursor is the agent's last edit of them before it. found_by edits_before: nothing names the commit (made by hand after the session, no trailer), and this session's agent last edited its files before it (give committed_at where the team's repository is not under the GitHub App): its work, not proven its commit; say so. closed_sessions: a teammate's session behind the change that you may not read (your team shows its members each other's sessions, their transcripts only to owners and admins): say whose it is and give its page, and that its author or an admin can tell more; nothing of it is returned. Offer the matching tasks when there are several; never silently broaden a repository search. No model generation.
KeepPlain: step 1 of sending the current coding session to the user's KeepPlain drafts, for the KeepPlain skill or plugin only. Call it only after the user asked to send this session and agreed to what the skill's preview showed. Returns a one-time upload link (15 minutes) for the skill's upload step, and an upload_id for finish_session_upload. Never put anything else at the link.
No arguments.
{
"type": "object",
"properties": {}
}| project |
| string |
| Optional, your team's sessions only: those of one project, by the name the team's lists show (usually the repository's folder). |
| task_type | string | Optional. The kind of task. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"task": {
"type": "string",
"description": "Optional, your team's sessions only: those of one task, by its title or task number (list_team_tasks shows them)."
},
"agent": {
"enum": [
"claude-code",
"codex",
"cursor",
"copilot",
"gemini-cli",
"windsurf",
"aider",
"pi",
"antigravity",
"hermes",
"other"
],
"type": "string",
"description": "Optional. Only sessions of this coding agent."
},
"limit": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "How many sessions, 1 to 5. Default 3."
},
"query": {
"type": "string",
"description": "The task in a few words, e.g. \"migrate queues to horizon\". No code, file paths, repository or company names."
},
"space": {
"enum": [
"all",
"mine",
"team",
"community"
],
"type": "string",
"description": "Optional. \"all\" (default): the user's own unpublished sessions first (two at most), then their team's, if the token belongs to a team, then the community's. \"mine\", \"team\" or \"community\": only those."
},
"stack": {
"type": "string",
"description": "Optional. The stack, e.g. \"laravel\" or \"nextjs, prisma\" (up to 5, comma-separated)."
},
"project": {
"type": "string",
"description": "Optional, your team's sessions only: those of one project, by the name the team's lists show (usually the repository's folder)."
},
"task_type": {
"enum": [
"greenfield",
"feature",
"refactor",
"migration",
"debug",
"tests",
"infra",
"docs"
],
"type": "string",
"description": "Optional. The kind of task."
}
}
}| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| paths | array | Files to find the sessions that changed them, relative to the repository root. |
| query* | string | |
| scope | string | Default project. Use all only for an explicitly broader search. |
| commit | string | A commit sha, 7 to 40 hex characters, to find the session that made it. |
| cursor | string | |
| subject | string | The first line of that commit's message (git show -s --format=%s): tells the session's git commits apart when it committed in another repository. |
| task_id | string | |
| project_id | string | |
| project_key | string | |
| committed_at | string | When that commit was made (git show -s --format=%cI): with no trailer and no session that made it, the session whose agent last edited its files before then is found (found_by edits_before). |
| agent_sessions | array | The Agent-Session trailer values of that commit. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1
},
"paths": {
"type": "array",
"items": {
"type": "string"
},
"description": "Files to find the sessions that changed them, relative to the repository root."
},
"query": {
"type": "string"
},
"scope": {
"enum": [
"project",
"all"
],
"type": "string",
"description": "Default project. Use all only for an explicitly broader search."
},
"commit": {
"type": "string",
"description": "A commit sha, 7 to 40 hex characters, to find the session that made it."
},
"cursor": {
"type": "string"
},
"subject": {
"type": "string",
"description": "The first line of that commit's message (git show -s --format=%s): tells the session's git commits apart when it committed in another repository."
},
"task_id": {
"type": "string"
},
"project_id": {
"type": "string"
},
"project_key": {
"type": "string"
},
"committed_at": {
"type": "string",
"description": "When that commit was made (git show -s --format=%cI): with no trailer and no session that made it, the session whose agent last edited its files before then is found (found_by edits_before)."
},
"agent_sessions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The Agent-Session trailer values of that commit."
}
}
}