npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@anyslate/mcp

v1.2.3

Published

AnySlate MCP server — connect AI agents to your AnySlate workspace

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@latest

Then set the ANYSLATE_TOKEN environment variable before running Claude Code.

OpenAI Codex

Use the dedicated AnySlate Codex plugin when available:

plugins/anyslate-codex

The 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

  1. Go to app.anyslate.io
  2. Navigate to Settings > MCP Tokens
  3. Click Create Token
  4. Choose one access profile:
    • AI Memory automation for Claude, Cursor, Devin Desktop, and other agents
    • Markdown files only for normal .md workspace file management
    • Full access only when the same integration must do both
  5. (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.
  6. 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