Skip to content

Tool reference

Every tool the MySpec MCP servers offer, which ones change data, and the rules for editing, paging, sessions, artifacts and comments.

Updated View as Markdown

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_file is local server only, because it saves files to your disk.
  • list_trashed_spec_files is 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_tasks applies the same change to every task you pass. A field you leave out stays as it is, and null clears 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 blocks the other task, it is blocked_by the other task, or the two are related. Each list_tasks task lists them as {type, task_id}. In update_tasks, add_relationships sets them and remove_relationships takes 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_status can partly succeed: a file it can’t write fails only its own tasks, and the result gives an outcome for each task. Pass expected_versions with the content_version values from list_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_projects and get_project show your role on each project as viewer_role: read, write or admin.
  • list_projects leaves out projects you have no role on, and other tools answer as if those projects do not exist.
  • create_project works whatever your role, and gives you admin on the new project.
  • A Read only API token, or a connection without write access, acts as read on 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:

  1. Read the file with get_spec_file or read_spec_file. Both return a content_version.
  2. Pass that value as expected_version to update_spec_file.
  3. 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:

  • offset is the first line to read, starting at 1.
  • limit is the number of lines, at most 2,000 (the default). One response holds at most 1 MiB.
  • The result includes total_lines, truncated and, 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_sessions before 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 write role on the project. With read-only access, no session is created.
  • For Brownfield workflows, start the local server’s reverse command 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_artifact creates revision 1. An artifact can hold at most 50 files, 2 MiB per file and 10 MiB per revision. Its slug must be unique in the project.
  • write_artifact_revision adds a revision. Without base_revision, the files you send become the whole artifact. With base_revision, you send only the changed files, plus the paths to drop in remove.
  • 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_artifact restores 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_count from get_artifact or list_artifacts as expected_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 in anchor_prefix or anchor_suffix.
  • update_spec_file_comment takes the comment’s own content_version as expected_version, not the file’s.
  • delete_spec_file_comment has 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.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close