Wrytewryte
GitHubLog inGet Started
MCP Server

Getting started

  • Overview
  • Authentication
  • Capabilities

Reference

  • Tool reference
  • Resources

Operating it

  • Rate limits
  • Troubleshooting
OverviewAuthenticationCapabilitiesTool referenceResourcesRate limitsTroubleshooting
Wrytewryte

A complete content workspace for developers. Write, manage, and publish — all from one place.

GitHub

Product

  • Features
  • Changelog
  • Feature Requests
  • How it Works

Company

  • Contact
  • GitHub
  • Abdul Rafay
  • Syntax Lab Technology

Legal

  • Terms
  • Privacy

© 2026 Wryte · v1.8.0 · build 3901d7b

Open Source · MIT Licensed

Getting started

  • Overview
  • Authentication
  • Capabilities

Reference

  • Tool reference
  • Resources

Operating it

  • Rate limits
  • Troubleshooting
OverviewAuthenticationCapabilitiesTool referenceResourcesRate limitsTroubleshooting
Docs/Reference

Every tool, its arguments, and the capability it requires.

Tool reference

All 41 tools the Wryte MCP server exposes, from convex/mcp/tools.ts.

An agent only ever sees the tools its granted capabilities allow. The catalog is filtered per request, so a read-only connection lists no write or media tools.

Arguments below are what you pass. Each tool also takes an injected caller argument that is filled in server-side from your verified token and stripped from anything a client sends, so it never appears in the schema you see.

The Main version of a post belongs to you. No tool reads or writes the Main body, promotes a draft, schedules or publishes.

Projects

wryte_projects_list

List the caller's writing projects with repo, branch, content path and format, and media storage mode.

  • Kind: query
  • Requires: wryte:read
  • Arguments: none

wryte_project_context

Everything an agent must follow for one project: frontmatter schema, statuses an agent may set, md or mdx, animation language, check level and rules, media provider and limits.

  • Kind: query
  • Requires: wryte:read
  • Arguments: projectId: id:projects

Posts

wryte_documents_list

Paginated list of a project's posts (id, title, slug). Page with the returned cursor.

  • Kind: query
  • Requires: wryte:read
  • Arguments: projectId: id:projects, paginationOpts: paginationOpts

wryte_documents_search

Search post titles across one project or all of them.

  • Kind: query
  • Requires: wryte:read
  • Arguments: term: string, projectId?: id:projects, limit?: number

wryte_documents_get

One post's title, slug, status, tags, frontmatter and Main word count. Never the Main body.

  • Kind: query
  • Requires: wryte:read
  • Arguments: documentId: id:documents

wryte_documents_workspace

Everything around a post in one call: metadata, draft tabs, research, animations referenced by drafts with their check state, and uploaded images.

  • Kind: query
  • Requires: wryte:read
  • Arguments: documentId: id:documents

wryte_documents_backlinks

List posts that link to this one.

  • Kind: query
  • Requires: wryte:read
  • Arguments: documentId: id:documents

wryte_documents_history

Publish history for a post, newest first.

  • Kind: query
  • Requires: wryte:read
  • Arguments: documentId: id:documents

wryte_documents_create

Create a post shell. The Main body stays empty; writing goes in a draft. The slug must be lowercase kebab-case and unused in the project, and frontmatter must be a JSON object with every required field from wryte_project_context.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: projectId: id:projects, title: string, slug: string, status?: string, tags?: string[], frontmatter?: string

wryte_documents_update

Move a post on the board or retag it. Only statuses from wryte_project_context are allowed.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: documentId: id:documents, status?: string, tags?: string[]

wryte_documents_trash

Move a post to the project trash. Refused once its Main version has content.

  • Kind: mutation
  • Requires: wryte:trash
  • Arguments: documentId: id:documents

wryte_trash_restore

Restore a trashed post.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: documentId: id:documents

Drafts

wryte_drafts_list

List a post's draft tabs (metadata only, oldest first).

  • Kind: query
  • Requires: wryte:read
  • Arguments: documentId: id:documents

wryte_drafts_get

Get one draft with its title, body and frontmatter.

  • Kind: query
  • Requires: wryte:read
  • Arguments: draftId: id:document_drafts

wryte_drafts_snapshot

Add a full draft tab, labelled <model> · <harness> (required). Returns unknownComponents and mdxError for mdx projects.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: documentId: id:documents, label: string, title: string, content: string, frontmatter?: string, summary?: string

wryte_drafts_update

Change any part of a draft. Send only what changes.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: draftId: id:document_drafts, label?: string, summary?: string, frontmatter?: string, title?: string, content?: string

wryte_drafts_remove

Delete a draft tab. The Main version is untouched.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: draftId: id:document_drafts

Research

wryte_research_list

List research attached to a post.

  • Kind: query
  • Requires: wryte:read
  • Arguments: documentId: id:documents

wryte_research_create

File 1 to 15 research items per call. Every draft of the post shares this pool. Links must be http or https.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: documentId: id:documents, items: { type: note|source|quote|outline|idea|ai_summary, title: string, content: string, url?: string, sourceName?: string, selectedForAi?: boolean }[]

wryte_research_update

Update a research item.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: researchId: id:document_research, type?: string, title?: string, content?: string, url?: string, sourceName?: string, selectedForAi?: boolean

wryte_research_remove

Delete a research item.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: researchId: id:document_research

Animations

wryte_animations_list

List a project's animation components (id, name, updatedAt).

  • Kind: query
  • Requires: wryte:read
  • Arguments: projectId: id:projects

wryte_animations_get_source

Get one animation's React source by id.

  • Kind: query
  • Requires: wryte:read
  • Arguments: animationId: id:animations

wryte_animations_upsert

Create or replace an animation by PascalCase name. Runs the same contract and type checks as the gallery, per the project's settings, records the result and returns diagnostics. dryRun checks without saving.

  • Kind: action
  • Requires: wryte:write
  • Arguments: projectId: id:projects, name: string, source: string, dryRun?: boolean

wryte_animations_remove

Delete an animation component.

  • Kind: mutation
  • Requires: wryte:write
  • Arguments: animationId: id:animations

Media

wryte_media_list

List a project's uploaded media, paginated.

  • Kind: action
  • Requires: wryte:media
  • Arguments: projectId: id:projects, cursor?: string, limit?: number

wryte_media_upload_url

Upload a file from disk. Returns a single-use URL, valid 10 minutes. POST the raw bytes with curl --data-binary and the right Content-Type; Wryte sends the file straight to the project's media provider and responds with url and ready-to-paste markdown. Nothing is kept in Wryte's own storage.

  • Kind: mutation
  • Requires: wryte:media
  • Arguments: projectId: id:projects, documentId?: id:documents, filename?: string, alt?: string

wryte_media_upload

Upload an image or video to the project's provider (GitHub, UploadThing, Cloudinary or R2) from an https sourceUrl, or from base64 for small files (then filename and mime are required). Returns url and ready-to-paste markdown.

  • Kind: action
  • Requires: wryte:media
  • Arguments: projectId: id:projects, sourceUrl?: string, base64?: string, filename?: string, mime?: string, alt?: string, documentId?: id:documents

Notes

Private notes and tasks on the user's Notes board (columns Notes, To do, Doing, Done). Notes are never published. Unlike posts, agents write notes directly; prefer wryte_notes_append for adding text.

wryte_notes_list

The user's notes, 25 per page: title, excerpt, status, due date, group. No bodies. Filter by group name, status (todo, doing, done, or notes for plain notes, in board order), dueBefore (YYYY-MM-DD, needs a task status) or a linked post. Page with continueCursor.

  • Kind: query
  • Requires: wryte:read, wryte:notes
  • Arguments: group?: string, status?: notes|todo|doing|done, dueBefore?: string, linkedDocumentId?: id:documents, cursor?: string

wryte_notes_search

Search note titles and bodies. Up to 16 hits with short snippets. Start here before creating a note that may already exist.

  • Kind: query
  • Requires: wryte:read, wryte:notes
  • Arguments: query: string

wryte_notes_get

One note: metadata, rev, group, linked posts, refs and body. The body is cut at maxChars (default 20,000); truncated says so and totalChars gives the full length. Keep rev for wryte_notes_update.

  • Kind: query
  • Requires: wryte:read, wryte:notes
  • Arguments: noteId: id:notes, maxChars?: number

wryte_note_groups_list

The user's note groups with their note counts.

  • Kind: query
  • Requires: wryte:read, wryte:notes
  • Arguments: none

wryte_notes_create

Create a note at the top of its board column. group is a name, found or created. status and dueDate make it a task. refs attaches up to 20 references: {kind: "pr"|"issue"|"link", url} or {kind: "comment", text, author?, url?}. documentIds links up to 20 posts. Returns noteId, rev and url.

  • Kind: mutation
  • Requires: wryte:notes
  • Arguments: title: string, content?: string, group?: string, status?: todo|doing|done, dueDate?: string, documentIds?: id:documents[], refs?: { kind: pr|issue|comment|link, url?: string, text?: string, author?: string }[]

wryte_notes_update

Change a note's title, status, due date, group, linked posts or refs; null clears status, due date or group. Changing status moves the card to the top of that column. Replacing content needs expectedRev from wryte_notes_get and is refused if the user edited since. refs adds to the existing ones.

  • Kind: mutation
  • Requires: wryte:notes
  • Arguments: noteId: id:notes, expectedRev?: number, title?: string, content?: string, status?: todo|doing|done|null, dueDate?: string|null, group?: string|null, documentIds?: id:documents[], refs?: ref[]

wryte_notes_append

Append markdown to the end of a note on a new line. Never overwrites what the user wrote. Use it for running logs.

  • Kind: mutation
  • Requires: wryte:notes
  • Arguments: noteId: id:notes, text: string

wryte_notes_trash

Move a note to the trash. The user can restore it for 30 days.

  • Kind: mutation
  • Requires: wryte:trash, wryte:notes
  • Arguments: noteId: id:notes

Note sharing

wryte_notes_share

Create a public read-only link anyone can open without a Wryte account. Pass noteIds (1 to 50) or group (shows its newest 200 notes and follows the group as it changes), not both. Readers always see the latest version; trashed notes are hidden. Optional title and expiresInDays (1, 7 or 30; omit for no expiry). Only share when the user asks.

  • Kind: mutation
  • Requires: wryte:notes
  • Arguments: noteIds?: id:notes[], group?: string, title?: string, expiresInDays?: 1|7|30

wryte_notes_shares_list

The user's active public note links, newest first (up to 100).

  • Kind: query
  • Requires: wryte:read, wryte:notes
  • Arguments: none

wryte_notes_share_revoke

Revoke a public note link. The URL stops working at once; the notes are untouched.

  • Kind: mutation
  • Requires: wryte:notes
  • Arguments: shareId: id:note_shares

Calendar and stats

wryte_calendar_get

Editorial calendar for one project: scheduled and published dates per post.

  • Kind: query
  • Requires: wryte:read
  • Arguments: projectId: id:projects

wryte_stats_get

Writing stats across all projects: streak, word counts, goals, status breakdown.

  • Kind: query
  • Requires: wryte:read
  • Arguments: none
Previous

Capabilities

Next

Resources