The two MySpec MCP servers share 43 tools in nine groups, with the same names wherever they do the same thing. Two more tools exist on only one server:
download_spec_fileis local server only, because it saves files to your disk.list_trashed_spec_filesis remote server only and deprecated.
In the tables, Changes data marks the tools that create, change or delete something in MySpec. They need a read and write API token or a connection with write access (except stream tokens; see Stream tokens). Every other tool only reads. Every tool also works within your role on the project; see Project roles.
Projects
| Tool | What it does | Changes data |
|---|---|---|
list_projects |
List or search the projects you can see, most recent activity first, with your role on each as viewer_role. |
No |
get_project |
Get one project with its active sessions, spec files and attachments, and your role on it as viewer_role. |
No |
create_project |
Create a project with a name and an optional description. | Yes |
update_project |
Change a project’s name, description or project type (greenfield, brownfield or auto). |
Yes |
archive_project |
Archive a project. Archiving an archived project does nothing. | Yes |
unarchive_project |
Return an archived project to the active list. | Yes |
delete_project |
Delete an archived project. It refuses an active project and never archives it for you. Needs the admin role on the project. |
Yes |
Spec files
| Tool | What it does | Changes data |
|---|---|---|
list_spec_file |
List a project’s spec files with path, type, size, revision count and last update. Filter to a folder with path. Set trashed: true to list the Trash Bin instead. |
No |
get_spec_file |
Get a file’s metadata, including the content_version you need to update it. On the local server, include_download_url also returns a time-limited download link for a revision. |
No |
read_spec_file |
Read a file’s text, up to 2,000 lines per call. Pass revision to read an older revision. |
No |
download_spec_file |
Local server only. Save a file to disk, by default under .specs/ in the server’s working folder. Handles binary files and files up to 50 MiB. Returns where it saved the file, not the content. It refuses to replace an existing file unless you pass overwrite: true. |
No |
upload_spec_file |
Add a new spec file at a path that has no file yet. On the local server, the body can come from a local file (local_file_path) instead of content. |
Yes |
update_spec_file |
Save a new revision of an existing file. Pass expected_version (see Edit safely). |
Yes |
Trash
| Tool | What it does | Changes data |
|---|---|---|
move_spec_file_to_trash |
Move a spec file to the Trash Bin. It disappears from file lists and from the AI’s tools, but stays restorable. This is not a permanent delete. | Yes |
restore_spec_file_from_trash |
Move a file from the Trash Bin back to the project’s files. | Yes |
list_trashed_spec_files |
Remote server only, deprecated. Lists the Trash Bin. Use list_spec_file with trashed: true instead; this tool will be removed. |
No |
Attachments
| Tool | What it does | Changes data |
|---|---|---|
list_attachments |
List a project’s attachments with name, type and size. | No |
get_attachment |
Get one attachment’s metadata. On the local server, include_download_url also returns a time-limited download link. |
No |
read_attachment |
Read an attachment. Text comes back in pages of lines. PNG, JPEG, GIF and WebP images come back whole. PDF, DOCX, XLSX and other binary files cannot be read here; open them in the web app. | No |
upload_attachment |
Add an attachment of up to 10 MB: PDF, DOCX, XLSX, PNG, JPEG, GIF, WebP or any UTF-8 text file. The local server reads a file path on your machine; the remote server takes the content as base64. With override: true, an existing attachment with the same name is replaced. |
Yes |
Sessions
| Tool | What it does | Changes data |
|---|---|---|
list_spec_sessions |
List a project’s sessions with their title and status. Filter by archive_filter (active, archived or all), status or a search query. |
No |
get_spec_session |
Get one session’s status, counters, dates and title. include_context: true also returns the session’s working context, up to 1 MiB. |
No |
start_spec_session |
Start a new Generate or Edit session with an opening message, wait for MySpec’s first reply, and return a link to continue in the web app. See Start a session. | Yes |
rename_spec_session |
Rename a session (up to 500 characters). Works on archived sessions too. | Yes |
archive_spec_session |
Archive a session. You must archive a session before you can delete it. | Yes |
unarchive_spec_session |
Return an archived session to the active list. | Yes |
delete_spec_session |
Delete an archived session. It refuses an active session and never archives it for you. | Yes |
No session tool returns the chat conversation itself.
Artifacts
| Tool | What it does | Changes data |
|---|---|---|
list_artifacts |
List a project’s artifacts with their revision count. | No |
get_artifact |
Get an artifact’s metadata and its list of files (path, type, size, checksum) for the latest revision, or for revision. |
No |
read_artifact_file |
Read one text file from an artifact, in pages of lines. Binary files such as images and fonts cannot be read. | No |
create_artifact |
Create an artifact from a set of files, as revision 1. | Yes |
write_artifact_revision |
Add a new revision, either with every file or with only the changed files. | Yes |
rollback_artifact |
Restore an earlier revision by adding a new revision with its files. | Yes |
Stream tokens
| Tool | What it does | Changes data |
|---|---|---|
create_stream_token |
Create a short-lived token that lets a client follow a project’s live events. | Yes |
list_stream_tokens |
List your organization’s stream tokens with their scope, expiry and whether each still works. Never returns the secret. | No |
revoke_stream_token |
Stop a stream token at once. | Yes |
A Read only API token can also create and revoke stream tokens, because a stream token only reads. A connector connected without write access cannot. See Stream tokens for how to use them.
Comments
| Tool | What it does | Changes data |
|---|---|---|
list_spec_file_comments |
List the comment threads on a spec file, with the passage each one is about, whether it is resolved and its comments. Filter with status: open, resolved or orphaned. |
No |
create_spec_file_comment_thread |
Start a comment thread on a passage of a spec file. | Yes |
reply_spec_file_comment_thread |
Reply to a thread. | Yes |
update_spec_file_comment |
Edit one of your own comments. | Yes |
delete_spec_file_comment |
Delete one of your own comments. | Yes |
Tasks
The task tools work on a project’s task board: the checkbox tasks in its
tasks.md files. See Tasks.
| Tool | What it does | Changes data |
|---|---|---|
list_tasks |
List a project’s tasks in file order. Each has a task_id, a status (pending, in_progress or done), an assignee, a priority, story points, a cycle, start and due dates, labels, and relationships with other tasks. Filter by status, assignee (me for yourself, none for unassigned), cycle, label or file. Add include_details to get each task’s sub-bullets. |
No |
list_task_assignees |
List the people a project’s tasks can be assigned to, and your own user id as self_user_id. |
No |
update_tasks |
Change the planning fields of one or more tasks: assignee, priority, story points, cycle, start and due dates, labels, and relationships with other tasks. It doesn’t change a task’s status or text. | Yes |
set_task_status |
Change the status of one or more tasks by rewriting their checkbox in tasks.md: [ ] pending, [-] in progress, [x] done. Each changed file gets one new revision. |
Yes |
update_tasksapplies the same change to every task you pass. A field you leave out stays as it is, andnullclears it. Labels are added and removed, not replaced. One unknown task id fails the whole call.- A relationship says how a task stands to another: it
blocksthe other task, it isblocked_bythe other task, or the two arerelated. Eachlist_taskstask lists them as{type, task_id}. Inupdate_tasks,add_relationshipssets them andremove_relationshipstakes task ids to unlink. Two tasks have one relationship at most, so setting one replaces the old one, and the other task shows the inverse. set_task_statuscan partly succeed: a file it can’t write fails only its own tasks, and the result gives an outcome for each task. Passexpected_versionswith thecontent_versionvalues fromlist_tasks, so a file that changed since you listed it is not written.- The task tools work only where the task board is available. Elsewhere they fail with “the task board is turned off in this MySpec environment”.
Project roles
Each tool works within your project role, and never does more than you can do in the web app:
| Your role | What the tools can do |
|---|---|
read |
Every tool that only reads, and the stream token tools. |
write |
Also the tools that change spec files, the Trash Bin, attachments, sessions, artifacts, comments and tasks, including start_spec_session. |
admin |
Also update_project, archive_project, unarchive_project and delete_project. |
list_projectsandget_projectshow your role on each project asviewer_role:read,writeoradmin.list_projectsleaves out projects you have no role on, and other tools answer as if those projects do not exist.create_projectworks whatever your role, and gives youadminon the new project.- A Read only API token, or a connection without write access, acts as
readon every project. Its tools that change data fail with the read-only error.
A tool that needs more than your role fails with a message like this one:
update_spec_file failed: permission denied — this action needs the write role on the project; you have read. Ask a project admin for access.A new token will not help. Ask someone with admin on the project to raise
your role. See Troubleshooting.
Edit safely with content_version
Several people and AI sessions can work on the same project at once. To avoid overwriting someone else’s work:
- Read the file with
get_spec_fileorread_spec_file. Both return acontent_version. - Pass that value as
expected_versiontoupdate_spec_file. - If someone saved the file in the meantime, the update is rejected and their
version is kept. The error says who changed it and when. Read the file again,
combine the changes, and update with the new
content_version.
Do not resend the same content after a conflict: that would undo the other
person’s work. content_version is not the same as the revision count.
The remote server always requires expected_version. The local server accepts an
update without it, but a project can be set up to reject such updates, so
always pass it.
Pagination
Lists
List tools take limit and offset. They return total and, while more
records remain, next_offset: pass it as offset to get the next page. The
local server’s list_projects returns no next_offset; page on with
offset until you have total projects. A limit above the maximum is reduced
to the maximum, except on the local server’s list_projects, which refuses it.
| Tool | Default page size | Maximum |
|---|---|---|
list_projects |
20 on the local server, 50 on the remote server | 100 on the local server, 200 on the remote server |
list_spec_file, list_attachments, list_stream_tokens |
50 | 200 |
list_artifacts |
50 | 100 |
list_spec_sessions |
10 | 20 |
list_tasks |
100 | 500 |
list_tasks returns total_tasks instead of total, and refuses a limit
above 500.
list_spec_file_comments returns at most 100 threads and shortens each comment
to 1,000 characters. Filter by status to see fewer threads in full.
Reading files by line
read_spec_file, read_attachment (for text) and read_artifact_file read a
window of lines:
offsetis the first line to read, starting at 1.limitis the number of lines, at most 2,000 (the default). One response holds at most 1 MiB.- The result includes
total_lines,truncatedand, when more lines remain,next_offset.
read_spec_file refuses binary files and files over 8 MiB. On the local server,
use download_spec_file for those. On the remote server, open them in the web
app.
Start a session from your agent
start_spec_session lets your coding agent start a MySpec session for you, with
an opening message it writes from what it knows about your code and your goal.
- One call starts one real session, and that session uses AI, just like one
you start in the web app. Call it once per goal. If the call times out, check
list_spec_sessionsbefore trying again, or you may create a duplicate. - It waits for the first reply, for up to 75 seconds, then returns. If the first reply is not finished by then, it returns anyway and the reply finishes in the background.
- It needs write access: a read and write API token, or a connection with
write access, and the
writerole on the project. With read-only access, no session is created. - For Brownfield workflows, start the local server’s
reversecommand first and keep it running, so the session can read your code. See Work on an existing codebase. - A Generate session runs at Full spec depth. The tool has no spec depth argument. When you continue the session in the web app, the level picked there applies from your next message. See Spec depth.
Arguments
| Argument | Required | Meaning |
|---|---|---|
project_id |
Yes | The project to start the session in. |
mode |
Yes | generate writes new spec files; edit changes existing ones. |
prompt |
Yes | The opening message. |
workflow_id |
No | Which workflow to follow (see below). Must match mode. Omit it to use the default. |
language |
No | The language the session writes in: en (English, the default), zh (Simplified Chinese), ja (Japanese) or vi (Vietnamese). It cannot change once the session starts. |
model_id |
No | Run the session with a specific model. Omit it to let MySpec choose. |
attachment_ids |
No | Up to 25 of the project’s attachments to reference in the opening message. |
spec_file_ids |
No | Up to 25 existing spec files to reference. In practice, Edit sessions need these. |
session_title |
No | A title of up to 500 characters. Some workflows rename the session during the interview. |
workflow_id |
Mode | Workflow |
|---|---|---|
myspec-greenfield-v1 |
generate |
MySpec (the default for generate) |
speckit-greenfield-v1 |
generate |
SpecKit |
openspec-brownfield-v1 |
generate |
OpenSpec, for an existing codebase |
myspec-brownfield-v1 |
generate |
MySpec, for an existing codebase |
myspec-edit-v1 |
edit |
MySpec edit (the default for edit) |
myspec-edit-brownfield-v1 |
edit |
MySpec edit, for an existing codebase |
An unknown workflow_id, or one that does not match mode, is rejected before
anything is created. So is an attachment or spec file id that does not belong to
the project.
Result
| Field | Meaning |
|---|---|
session_url |
The link to open the session in MySpec. Give it to the person you are working with. |
session_id, project_id |
Identifiers of the new session and its project. |
assistant_text |
MySpec’s first reply, or as much of it as was ready. |
pending_action |
What MySpec is waiting for (see below). |
next_step_instruction |
Guidance for the calling agent. |
first_turn_error |
Present only when the session was created but its first reply could not run. The person can send the message again from the session page. |
warnings |
Local server only. For example, a warning that no reverse bridge is running for a Brownfield session. |
pending_action |
Meaning |
|---|---|
mcq_form_pending |
MySpec asked interview questions. |
spec_file_pending_decision |
A spec file is waiting to be approved or changed. |
review_feedback_pending |
Review feedback is waiting for a decision. |
user_choice_pending |
MySpec asked the person to pick an option. |
turn_still_running |
The first reply was still being written after 75 seconds. It finishes in the background; opening session_url shows it. |
none |
Nothing is waiting. |
The agent’s job ends with handing over session_url. The person continues the
session in MySpec; the agent should not try to answer MySpec’s questions itself.
How artifacts work
An artifact is a set of files that MySpec stores and versions as one unit, such
as an HTML mockup made of index.html, styles.css and app.js.
create_artifactcreates revision 1. An artifact can hold at most 50 files, 2 MiB per file and 10 MiB per revision. Itsslugmust be unique in the project.write_artifact_revisionadds a revision. Withoutbase_revision, the files you send become the whole artifact. Withbase_revision, you send only the changed files, plus the paths to drop inremove.- Revisions never change once written. By default, only the 50 newest are kept; rolling back to an older one that is no longer kept fails with “not found”.
rollback_artifactrestores an earlier revision by adding a new revision with its files. History is never rewritten.- To avoid overwriting someone else’s revision, pass the current
revision_countfromget_artifactorlist_artifactsasexpected_version. If the artifact has moved on, the write is rejected; read it again and retry.
Rules for comments
- No tool can resolve, reopen or re-attach a thread. Agents can read, add, reply, and edit or delete their own comments. Deciding that a discussion is finished stays with people. See Comments.
- To start a thread, pass the passage as
anchor_quote, copied exactly from the file. MySpec finds it in the current text. Do not send character positions. If the passage appears more than once, add a few words before or after it inanchor_prefixoranchor_suffix. update_spec_file_commenttakes the comment’s owncontent_versionasexpected_version, not the file’s.delete_spec_file_commenthas three outcomes. A reply disappears. A first comment that has replies is replaced by a “deleted” placeholder, so the replies still make sense. A first comment with no replies deletes the whole thread.- On a file in the Trash Bin you can read, edit and delete comments, but you cannot start threads or reply.
- MySpec records comments and spec file changes made through these tools as AI work. In the web app, comments written by an agent show as MySpec AI.
Limit the tools an agent sees
On the remote server, the optional X-MCP-Tools header limits the tools your
agent sees. See Remote MCP server.