@anyslate/mcp
v1.2.3
Published
AnySlate MCP server — connect AI agents to your AnySlate workspace
Maintainers
Readme
@anyslate/mcp
Connect AI agents to your AnySlate workspace via the Model Context Protocol.
Do you need this package?
Increasingly, no — and that is the point of this section.
AnySlate runs a remote MCP server at https://mcp.anyslate.io/mcp that speaks
OAuth (authorization code + PKCE, with dynamic client registration). Any client
that supports remote MCP servers can connect to it directly: you add the URL,
approve once in the browser, and no token is ever created, pasted, or stored
in a config file. Claude Desktop's custom connectors, claude mcp add
--transport http, and Cursor's url-form entries all take that path.
This package is the stdio bridge for clients that cannot do that — hosts without remote-server support, CI, and air-gapped setups. It requires a static token by design. If your client can add a remote MCP server, prefer that: a long-lived bearer sitting in a plaintext config is a worse credential than an expiring OAuth token the client refreshes for you.
Everything below is the bridge path.
Setup
Add to your MCP client configuration:
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"anyslate": {
"command": "npx",
"args": ["-y", "@anyslate/mcp@latest"],
"env": {
"ANYSLATE_TOKEN": "as_mcp_your_token_here"
}
}
}
}Claude Code
claude mcp add anyslate -- npx -y @anyslate/mcp@latestThen set the ANYSLATE_TOKEN environment variable before running Claude Code.
OpenAI Codex
Use the dedicated AnySlate Codex plugin when available:
plugins/anyslate-codexThe plugin registers this same MCP bridge and adds Codex-specific automatic
recall/checkpoint rules. Configure the token in ~/.anyslate/codex.env.
Use the AI Memory automation token profile unless you explicitly need
ordinary Markdown file-management tools.
Cursor
Go to Settings > MCP Servers > Add Server:
{
"anyslate": {
"command": "npx",
"args": ["-y", "@anyslate/mcp@latest"],
"env": {
"ANYSLATE_TOKEN": "as_mcp_your_token_here"
}
}
}Devin Desktop (formerly Windsurf)
Edit ~/.codeium/windsurf/mcp_config.json — Cognition renamed the editor in
June 2026 but the config path carried over unchanged, so this is correct and
not a typo:
{
"mcpServers": {
"anyslate": {
"command": "npx",
"args": ["-y", "@anyslate/mcp@latest"],
"env": {
"ANYSLATE_TOKEN": "as_mcp_your_token_here"
}
}
}
}Getting a Token
- Go to app.anyslate.io
- Navigate to Settings > MCP Tokens
- Click Create Token
- Choose one access profile:
- AI Memory automation for Claude, Cursor, Devin Desktop, and other agents
- Markdown files only for normal
.mdworkspace file management - Full access only when the same integration must do both
- (Optional) Pick a Memory scope to narrow the token below workspace-wide:
- Entire workspace (default) — token can touch every memory.
- A single project — bound to one project folder; other projects are invisible to this token.
- A topic tag — bound to memories tagged with that word.
- Specific memories — pinned to one or more memory ids. Picking a narrower scope mints a paired capability handle on the server and binds it to the token. The bridge below applies the scope automatically — you do NOT need to set any extra env var.
- Copy the token (starts with
as_mcp_)
MCP access is included with every AnySlate plan.
Scope binding (how the narrowing actually takes effect)
Each MCP token can carry an optional default_handle_id on its server row.
When the worker dispatches a tool call and args.handle is absent, the
dispatcher resolves that bound handle and applies its scope automatically.
Result: the bridge stays a thin pass-through; the user's scope choice in
the desktop dialog is enforced server-side even when the agent has no
concept of handles.
Want a different scope? Mint a different token in the desktop dialog —
one token, one scope is the clean invariant. Scoped tokens (those minted
with anything narrower than "Entire workspace") have their scope
enforced server-side and cannot be widened by anything the client sends.
The dispatcher ignores args.handle from clients holding a scoped token
— the bound scope is the only scope.
The original handle primitive (caller-supplied args.handle to narrow a
broader bearer) is still honoured for legacy/unscoped tokens
(default_handle_id IS NULL) so older agents that pass a handle keep
working.
The remote MCP server filters tools/list by token scope. A Memory token
does not advertise Markdown resource CRUD tools, which keeps agents from
using create_resource or update_resource when they should be calling
import_chat, checkpoint_session, and upload_artifact.
Available Tools
The visible tool list depends on the token profile.
Resource tools (markdown files)
| Tool | Description |
|------|-------------|
| list_resources | List markdown files with pagination and folder filtering |
| search_resources | Search files by name |
| read_resource | Read file content and section structure |
| get_resource_versions | View version history |
| create_resource | Create new markdown files |
| update_resource | Replace entire file content |
| update_resource_section | Update a specific section by ID |
| delete_resource | Delete a file |
Memory tools (AI Work Memory Layer)
| Tool | Description |
|------|-------------|
| list_memories / read_memory / search_memory | Browse and search captured chats |
| import_chat | Spawn a new memory page from a fresh chat |
| checkpoint_session | Append a turn / decision / task / artifact to a memory |
| recall | Semantic + lexical hybrid search across all memories (the primary "find prior work" tool) |
| surface_relevant | Proactively surface memory that bears on the current turn (can abstain) |
| search_files | Markdown filename substring search |
| attach_artifact_url / request_artifact_upload / upload_artifact / get_artifact | Ingest reachable URLs, raw local binaries via short-lived PUT, or inline UTF-8 text; retrieve stored artifacts |
| append_decision / append_task | Promote a single decision or task |
| generate_continuation_prompt | Render a continuation seed for an existing memory |
| get_checkpoint_status / get_context_subgraph / expand_decision / get_related / list_handles | Inspect graph and pending state |
Slash prompts (MCP prompts/list)
When your host surfaces MCP prompts as slash commands (Cursor, Claude Desktop, Claude Code, Devin Desktop), AnySlate exposes:
/anyslate-new- paste-as-first-message capture seed for a fresh chat. The agent will spawn an AnySlate memory page and checkpoint every reply automatically./anyslate-continue <memory_id>- continuation seed for an existing memory. Renders the canonical mcp_lite header + glossary + decisions + open tasks.
Optional arguments: topic (anyslate-new) and theme (both): general | coding | debugging | prd | strategy | marketing | research.
Repo scaffolding
npx @anyslate/mcp@latest setup-repo [path] [--force]Drops AnySlate instruction files into the target directory:
| File | Picked up by |
|------|--------------|
| CLAUDE.md | Claude Code, Aider, generic CLAUDE.md-aware tools |
| .cursor/rules/anyslate.md | Cursor (Project Rules) |
| AGENTS.md | OpenAI Codex and other AGENTS.md-aware tools |
| .windsurfrules | Devin Desktop (formerly Windsurf) workspace rules — filename unchanged by the rebrand |
Each file contains the AnySlate standing rules: recall-before-answering, checkpoint-after-every-reply, upload-artifacts-first, optional handle. Existing files are skipped unless --force is passed; safe to re-run.
Important: MCP exposes the tools, but the repo rules tell the agent when to
use them. Cursor and Devin Desktop need these rules for automatic memory behavior.
Claude Code can also use lifecycle hooks from @anyslate/cli for background
activity capture.
Requirements
- Node.js 18 or later
- Any active AnySlate account
Troubleshooting
"Node.js 18 or later is required" - The MCP SDK needs Node 18+. If you use nvm, set your default: nvm alias default 22. Or specify the full path in your config:
{
"command": "/Users/you/.nvm/versions/node/v22.22.0/bin/npx",
"args": ["-y", "@anyslate/mcp@latest"]
}"TransformStream is not defined" - Same cause as above: you're running on Node <18. Update Node or use a full path.
"Missing ANYSLATE_TOKEN" - Set the ANYSLATE_TOKEN environment variable in your MCP client config.
Configuration (env vars)
| Variable | Required | Purpose |
|---|---|---|
| ANYSLATE_TOKEN | yes | Bearer credential (as_mcp_… or as_oauth_…). Carries scope (memory: read/write/search, files: read/write/search) AND any memory narrowing you picked in the desktop Create Token dialog (project / topic / specific memories). The narrowing is enforced server-side — no separate handle env var. |
| ANYSLATE_MCP_URL | no | Override the MCP endpoint. Defaults to https://mcp.anyslate.io/mcp. Set to a dev workers.dev URL when testing against staging. |
"Invalid token format" - Static tokens start with as_mcp_; OAuth-issued access tokens start with as_oauth_. Generate a static token at app.anyslate.io, or use OAuth from browser-hosted MCP clients.
"Invalid or expired token" - Your token may have been revoked or expired. Generate a new one.
"MCP access is unavailable" - Sign in again and confirm the token has the required scope. MCP itself is included on every plan.
Documentation
Full documentation: anyslate.io/docs/mcp
