Skip to main content

Taut MCP

taut-mcp is the optional stdio MCP adapter for Taut. One client launches one protocol-clean process. That process can keep up to eight local workspaces resident, but it is not a daemon and stores no durable MCP session state. Taut databases remain authoritative.

One application surface supports both MCP wire eras:

  • legacy clients using protocol 2025-11-25 and initialize;
  • modern sessionless clients using 2026-07-28 and server/discover.

Both receive the same 20 tools, input schemas, tool results, instructions, and Taut behavior. The MCP SDK owns the different wire envelopes. The complete contract is docs/specs/05-taut-mcp.md [MCP-1]–[MCP-12].

Workspaces and Identity

Every identity-using call carries:

  • workspace: an absolute local directory containing an existing Taut project; and
  • token: an existing Taut continuity token for the intended member.

The token selects identity continuity. It is not authentication, authorization, or a bearer capability. Treat it as sensitive input: do not invent it, place it in chat, or log it.

attach_workspace(workspace, token) eagerly resolves the project, validates the member, starts notification observation, and retains one configured client. Attach is useful when setup cost should be paid before a domain operation, but it is not a correctness prerequisite.

Each of the 17 CLI-shaped tools also requires workspace and token. If its workspace is not resident, that first call performs the same setup lazily and retains the same client/reactor. Reuse the canonical workspace returned by a successful call or list_workspaces for the fast path.

detach_workspace is different: it accepts only the exact canonical workspace and no token because it removes process-local cached state rather than performing a Taut identity operation. list_workspaces takes no arguments and reports only state resident in the current process.

After process restart, an ordinary CLI-shaped call can reconstruct its workspace/member binding from workspace plus token; prior attach state is never required.

Notifications

The fixed read-only resource is:

taut://notifications/current

It reports pending notification pointers for resident workspaces. Reading it does not claim notifications, advance chat cursors, touch member activity, or return every unread message. Use inbox(workspace, token, ...) to consume notification pointers and act only on the records returned by that consuming call.

The resource is the level-triggered source of truth. Delivery mechanisms are redundant hints:

  • legacy clients use resources/subscribe and resources/unsubscribe;
  • modern clients open a long-lived subscriptions/listen request whose notifications.resourceSubscriptions includes taut://notifications/current.

Modern listen filters, acknowledgments, subscription ids, fanout, cancellation, and graceful close are owned by the MCP SDK. A dropped, duplicated, or delayed hint does not lose Taut data; reread the resource.

--claude-channel adds Claude's experimental channel wake only for legacy clients. It sends a fixed cue to reread the resource and includes no Taut content. Modern discovery does not advertise a corresponding Claude capability. The Claude path is host-specific and best-effort; it never replaces standard tools, resource reads, or subscriptions.

Tool Notes

message_show(workspace, token, msg_id) accepts an exact 19-digit message id and advances the selected member's seen cursor through that message. Use log(workspace, token, ...) for cursor-neutral inspection.

message_delete(workspace, token, msg_id) physically and irreversibly deletes an ordinary message authored by that member. It does not cascade to notifications, memberships, cursors, DM state, or sub-threads.

message_react(workspace, token, msg_id, reaction) validates the reaction against the resident workspace configuration, advances the actor's cursor, and attempts one atomic best-effort broadcast to the current non-actor audience. A warning means the commit result may be uncertain, so do not blind-retry.

Use channel_show(workspace, token, channel) to read top-level channel metadata without activity or cursor effects. Use channel_topic(workspace, token, channel, topic) to set one single-line topic or clear it with JSON null; current channel membership is required.

Keep returned 19-digit integer timestamps as decimal text before JavaScript reuse because they can exceed JavaScript's exact-number range.

MCP cancellation is not transaction evidence. A canceled stdio request gets no JSON-RPC response in either era, but synchronous Taut work that already started may still commit. Inspect current Taut state before retrying a consuming or mutating call.

Install and Run

The extension distribution remains taut-mcp; its core dependency is the taut-chat distribution, which still provides import taut and the taut command. The repository's coordinated PyPI and immutable GitHub Release path is configured, but configuring it does not publish a release. Once the first coordinated PyPI version is published:

pipx install taut-chat
pipx inject --include-apps taut-chat taut-mcp
taut-mcp

The tag gate reuses the exact wheel and sdist built by canonical Test. It stages them in a draft GitHub Release, publishes them through the taut-mcp top-level PyPI Trusted Publisher, verifies filenames and SHA-256 digests, and only then publishes the GitHub Release as immutable.

From this checkout:

uv sync --directory extensions/taut_mcp --extra dev
uv run --directory extensions/taut_mcp taut-mcp

Stdout is reserved for MCP messages. Diagnostics are content-free and go to stderr.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

taut_mcp-0.8.0.tar.gz (29.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

taut_mcp-0.8.0-py3-none-any.whl (36.8 kB view details)

Uploaded Python 3

File details

Details for the file taut_mcp-0.8.0.tar.gz.

File metadata

  • Download URL: taut_mcp-0.8.0.tar.gz
  • Upload date:
  • Size: 29.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for taut_mcp-0.8.0.tar.gz
Algorithm Hash digest
SHA256 77bab3cca103293999a4ecf78aba5346c601004567389da0508cd85f94c11cdc
MD5 1ed3e00aa6b42783ab926ddc15c973bc
BLAKE2b-256 e8f1f61ed13c24d988e30632812cec8b5c951a07410e2d6528cda4b652e2fb3c

See more details on using hashes here.

File details

Details for the file taut_mcp-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: taut_mcp-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 36.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for taut_mcp-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7a2598d508ff1af5e3c15acfd72ea7f79e2e3639416ba08dbb0a03447e9520cf
MD5 5e54e66bb06a3cfe0e7d491acc876b6e
BLAKE2b-256 bcb2f5f6d4b529d2af5bf0250b81a90dd1c2fc31f80205c5b8c4fee6dce8e9ee

See more details on using hashes here.

Release history Release notifications | RSS feed

0.9.5

2 files

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.7

2 files

0.8.6

2 files

0.8.5

2 files

0.8.2

2 files

0.8.1

2 files

This release

0.8.0 This release

2 files

0.7.1

2 files

0.7.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page