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

@anychat-ai/mcp

v0.85.0

Published

Anychat MCP server — drive your Anychat workspace (agents, playbooks, channels, people, outreach) from Claude Code, Claude Desktop, Cursor, or any MCP host.

Readme

@anychat-ai/mcp

Drive your Anychat workspace from Claude Code, Claude Desktop, Cursor, or any MCP host.

Anychat is the agent framework for business messaging — RCS, WhatsApp, Apple Messages for Business and SMS. This Model Context Protocol server exposes the Anychat public API as tools, so an AI agent can read and change your agents, playbooks, channels, people and outreach with your own API key and your own permissions — nothing it does exceeds what you could do with curl.

Docs: https://docs.anychat.ai/integrations/mcp/ · API reference: https://docs.anychat.ai/reference/agent-api/

Setup

  1. Create an API key in the Anychat console: Workspace → API keys. Give it only the scopes you want your agent to have (e.g. agents:write, people:read, messages:read).
  2. Add the server to your host.

Claude Code

claude mcp add anychat --env ANYCHAT_API_KEY=sk-any-... -- npx -y @anychat-ai/mcp

Claude Desktop / Cursor / other MCP hosts — add to the mcpServers config:

{
  "mcpServers": {
    "anychat": {
      "command": "npx",
      "args": ["-y", "@anychat-ai/mcp"],
      "env": { "ANYCHAT_API_KEY": "sk-any-..." }
    }
  }
}

Check the key (prints org, role, scopes):

ANYCHAT_API_KEY=sk-any-... npx -y @anychat-ai/mcp check

Environment

| Variable | Required | Default | | ------------------ | -------- | ------------------------- | | ANYCHAT_API_KEY | yes | — | | ANYCHAT_API_URL | no | https://api.anychat.ai | | ANYCHAT_DOCS_URL | no | https://docs.anychat.ai |

Flags: --profile core|full picks the tool set (default full, see Profiles); --read-only registers only read tools. Subcommands: check, tools, --version, --help.

Tools

205 tools, a 1:1 projection of the Agent API grouped as the reference is (orient → Definition → Capabilities → Channels → People → Outreach → Campaigns → Tests → Personas → Emulator → Activity → Org → Docs). npx -y @anychat-ai/mcp tools prints the live table.

Every tool carries MCP annotations: read tools are readOnlyHint; write tools change configuration; destructive tools (deletes, outreach sends to real people, provisioning requests, imports over an existing agent, secret rotation) are destructiveHint so your host asks before running them.

Profiles

Every tool definition (name, description, input schema) is sent to the model on every call, so a big table has a real per-turn cost. Two profiles trade breadth for weight:

  • full (default) — all 205 tools.
  • core — 83 tools, the everyday set: whoami; agents (list / get / create / update / export / import, apply template, catalogs); the whole Definition (identity, personality, standing instructions, guardrails, rules, goals, playbooks, message templates, lint_agent); the media library (list / add / update / delete); tool bindings (list / upsert); scheduling config; People field definitions; Things (read); Facts (read / replace); business info (read / replace); channels (list / get / request / bind, early access, launch); people (list / get / update, list segments); Outreach (list / get / create / update, preview an opener, send it to one person) and sending settings; personas (list / create / reset, send a sandbox turn); emulator links (list / create); conversations / messages / logs / activity; org; docs. About half the tokens of full.

Pick one with --profile core on the CLI or createServer({ profile: 'core' }) in code; the Profile column below shows which set each tool belongs to, and npx -y @anychat-ai/mcp tools --profile core lists just that set. Nothing else changes: full stays the default, and the core set only ever grows — a tool leaves it only when the route behind it is retired.

npm run tokens (in a checkout, after npm run build) prints the estimated per-tool token weight — what the model pays for each definition — sorted heaviest first, with totals per profile.

| Tool | Kind | Scope | Profile | Purpose | | ------------------------------------ | ----------- | ---------------------- | ------- | --------------------------------------------------- | | whoami | read | (any) | core | Who am I | | list_agents | read | agents:read | core | List agents | | get_agent | read | agents:read | core | Get agent | | create_agent | write | agents:write | core | Create agent | | update_agent | write | agents:write | core | Update agent | | delete_agent | destructive | agents:write | full | Delete agent | | export_agent | read | agents:read | core | Export agent | | import_agent | destructive | agents:write | core | Import agent document | | apply_agent_template | destructive | templates:apply | core | Apply agent template | | get_template_update | read | agents:read | full | Check for a template update | | preview_template_update | read | agents:read | full | Preview a template update (three-way merge) | | apply_template_update | destructive | agents:write | full | Apply a template update | | list_catalog_items | read | catalogs:read | core | List a system catalog | | get_catalog_item | read | catalogs:read | core | Get a catalog item | | get_identity | read | agents:read | core | Get agent identity | | update_identity | write | agents:write | core | Update agent identity | | get_personality | read | agents:read | core | Get agent personality | | set_personality | write | agents:write | core | Set agent personality | | import_personality_template | write | templates:apply | full | Import personality template | | get_standing_instructions | read | agents:read | core | Get standing instructions | | set_standing_instructions | write | agents:write | core | Set standing instructions | | get_guardrails | read | agents:read | core | Get agent guardrails | | set_guardrails | write | agents:write | core | Set agent guardrails | | update_guardrails | write | agents:write | full | Update agent guardrails | | import_guardrail_template | write | templates:apply | full | Import guardrail template | | get_rules | read | agents:read | core | Get agent rules | | replace_rules | write | agents:write | core | Replace agent rules | | list_playbooks | read | agents:read | core | List playbooks | | get_playbook | read | agents:read | core | Get playbook | | create_playbook | write | agents:write | core | Create playbook | | update_playbook | write | agents:write | core | Update playbook | | delete_playbook | destructive | agents:write | core | Delete playbook | | set_default_playbook | write | agents:write | core | Set default playbook | | import_playbook_template | write | templates:apply | full | Import playbook template | | generate_playbook_flow | write | agents:write | full | Generate a playbook flow (draft) | | list_message_templates | read | agents:read | core | List Message Templates | | get_message_template | read | agents:read | core | Get Message Template | | upsert_message_template | write | agents:write | core | Create or replace Message Template | | delete_message_template | destructive | agents:write | core | Delete Message Template | | preview_message_template | read | agents:read | full | Preview Message Template | | lint_agent | read | agents:read | core | Lint agent definition | | review_agent | write | agents:write | full | Review agent definition (model) | | get_agent_review | read | agents:read | full | Get agent review | | dismiss_review_finding | write | agents:write | full | Dismiss a review finding | | get_agent_review_quota | read | agents:read | full | Get review quota | | get_goals | read | agents:read | core | Get agent goals | | replace_goals | write | agents:write | core | Replace agent goals | | list_media | read | agents:read | core | List media | | get_media | read | agents:read | full | Get media item | | add_media | write | agents:write | core | Add media | | update_media | write | agents:write | core | Update media | | replace_media_content | write | agents:write | full | Replace media file | | describe_media | write | agents:write | full | Regenerate media description | | delete_media | destructive | agents:write | core | Delete media | | list_connections | read | agents:read | core | List connected accounts | | get_connection | read | agents:read | full | Get a connected account | | delete_connection | destructive | agents:write | full | Disconnect an account | | list_integrations | read | agents:read | full | List custom integrations | | get_integration | read | agents:read | full | Get a custom integration | | upsert_integration | write | agents:write | full | Create or replace a custom integration | | delete_integration | destructive | agents:write | full | Delete a custom integration | | get_scheduling_config | read | agents:read | core | Get scheduling config | | replace_scheduling_config | write | agents:write | core | Replace scheduling config | | get_notifications_config | read | agents:read | core | Get notifications config | | replace_notifications_config | write | agents:write | core | Replace notifications config | | get_people_fields | read | agents:read | core | Get people field definitions | | replace_people_fields | write | agents:write | core | Replace people field definitions | | list_outreach_links | read | agents:read | full | List test links | | create_outreach_link | write | agents:write | full | Create a test link | | update_outreach_link | write | agents:write | full | Pause or resume a test link | | delete_outreach_link | destructive | agents:write | full | Delete a test link | | redeem_outreach_link | write | agents:write | full | Redeem a test link as a persona | | get_things | read | agents:read | core | Get Things | | replace_things | write | agents:write | full | Replace Things | | get_collections | read | agents:read | full | Get collections | | replace_collections | write | agents:write | full | Replace collections | | get_facts | read | agents:read | core | Get Facts | | replace_facts | write | agents:write | core | Replace Facts | | suggest_fact_paraphrases | write | agents:write | full | Suggest Fact paraphrases | | get_fact_usage | read | agents:read | full | Get Fact usage | | get_business_info | read | agents:read | core | Get business info | | replace_business_info | write | agents:write | core | Replace business info | | list_knowledge_sources | read | knowledge:read | full | List knowledge Sources | | get_knowledge_source | read | knowledge:read | full | Get one knowledge Source | | get_knowledge_source_content | read | knowledge:read | full | Get a knowledge Source content | | create_knowledge_source | write | knowledge:write | full | Add a knowledge Source | | delete_knowledge_source | destructive | knowledge:write | full | Delete a knowledge Source | | refresh_knowledge_source | write | knowledge:write | full | Refresh a knowledge Source | | convert_knowledge_source_to_facts | write | knowledge:write | full | Convert a knowledge Source to Facts | | get_automated_outreach_config | read | agents:read | full | Get Automated Outreach config | | replace_automated_outreach_config | write | agents:write | full | Replace Automated Outreach config | | list_automated_outreach_runs | read | agents:read | full | List Automated Outreach runs | | start_automated_outreach_run | destructive | agents:write | full | Run Automated Outreach now | | list_channels | read | agents:read | core | List channel bindings | | get_channel | read | agents:read | core | Get a channel binding | | request_channel | destructive | agents:write | core | Request a managed channel | | bind_channel | write | agents:write | core | Bind an unmanaged channel (bring your own provider) | | update_channel | write | agents:write | full | Update a channel binding | | disable_channel | write | agents:write | full | Disable a channel binding | | enable_channel | write | agents:write | full | Enable a channel binding | | test_channel_connection | write | agents:write | core | Test a channel's connection | | get_channel_early_access | read | agents:read | core | Get a channel's launch state and early-access list | | set_channel_early_access | write | agents:write | core | Replace a channel's early-access list | | launch_channel | destructive | agents:write | core | Launch a channel (open it to everyone) | | delete_channel | destructive | agents:write | full | Delete a channel binding | | list_people | read | people:read | core | List people | | get_people_stats | read | people:read | core | Count people | | get_person | read | people:read | core | Get a person | | create_person | write | people:write | full | Create a person | | update_person | write | people:write | core | Update a person | | delete_person | destructive | people:write | full | Delete a person | | merge_people | write | people:write | full | Merge two people | | export_people | read | people:export | full | Export people (bulk) | | import_people | write | people:write | full | Import people | | send_outreach_follow_up | destructive | people:write | full | Send an outreach follow-up to a person | | list_outreach_sends | read | people:read | full | List outreach sends | | get_outreach_send | read | people:read | full | Get one outreach send | | list_person_appointments | read | people:read | full | List a person's appointments | | list_appointments | read | people:read | full | List appointments (all people) | | list_segments | read | people:read | core | List people segments | | get_segment | read | people:read | full | Get a people segment | | create_segment | write | people:write | full | Create a people segment | | update_segment | write | people:write | full | Replace a people segment | | delete_segment | destructive | people:write | full | Delete a people segment | | list_outreach | read | agents:read | core | List Outreaches | | create_outreach | write | agents:write | core | Create an Outreach | | get_outreach | read | agents:read | core | Get an Outreach | | update_outreach | write | agents:write | core | Update an Outreach | | delete_outreach | destructive | agents:write | full | Delete an Outreach | | preview_outreach | read | agents:read | core | Preview an Outreach's opener | | send_outreach | destructive | people:write | core | Send an Outreach to one person | | cancel_outreach_send | write | people:write | full | Cancel a queued outreach send | | get_sending_settings | read | agents:read | core | Get sending settings | | update_sending_settings | write | agents:write | core | Update sending settings | | create_campaign | write | agents:write | full | Create campaign | | list_campaigns | read | agents:read | full | List campaigns | | get_campaign | read | agents:read | full | Get campaign | | update_campaign | write | agents:write | full | Update campaign | | delete_campaign | write | agents:write | full | Delete campaign | | stage_campaign | write | agents:write | full | Stage campaign | | list_campaign_recipients | read | agents:read | full | List campaign recipients | | start_campaign | destructive | agents:write | full | Start campaign | | pause_campaign | write | agents:write | full | Pause campaign | | resume_campaign | write | agents:write | full | Resume campaign | | cancel_campaign | destructive | agents:write | full | Cancel campaign | | get_campaign_report | read | agents:read | full | Get campaign report | | preview_campaign_message | read | agents:read | full | Preview campaign message | | list_test_suites | read | agents:read | full | List test suites | | get_test_suite | read | agents:read | full | Get test suite | | create_test_suite | write | agents:write | full | Create test suite | | update_test_suite | write | agents:write | full | Update test suite | | delete_test_suite | destructive | agents:write | full | Delete test suite | | list_test_cases | read | agents:read | full | List test cases | | get_test_case | read | agents:read | full | Get test case | | create_test_case | write | agents:write | full | Create test case | | update_test_case | write | agents:write | full | Update test case | | delete_test_case | destructive | agents:write | full | Delete test case | | generate_test_cases | write | agents:write | full | Generate test cases | | compile_test_case | write | agents:write | full | Compile test case | | preview_test_case | read | agents:read | full | Preview test case | | run_tests | write | agents:write | full | Start test run | | pause_test_run | write | agents:write | full | Pause test run | | resume_test_run | write | agents:write | full | Resume test run | | cancel_test_run | write | agents:write | full | Cancel test run | | pin_test_run | write | agents:write | full | Pin or unpin test run | | list_test_runs | read | agents:read | full | List test runs | | get_test_run | read | agents:read | full | Get test run | | list_test_results | read | agents:read | full | List test results | | get_test_result | read | agents:read | full | Get test result | | copy_test_case | write | agents:write | full | Copy test case to a suite | | create_test_case_from_conversation | write | agents:write | full | Make a Test from a conversation | | get_test_pass_rates | read | agents:read | full | Get Playbook pass rates | | get_test_quota | read | agents:read | full | Get test quota | | get_test_case_history | read | agents:read | full | Get test case history | | list_personas | read | agents:read | core | List personas | | get_persona | read | agents:read | full | Get persona | | create_persona | write | agents:write | core | Create persona | | update_persona | write | agents:write | full | Update persona | | reset_persona | write | agents:write | core | Reset persona | | delete_persona | destructive | agents:write | full | Delete persona | | create_persona_from_conversation | write | agents:write | full | Create persona from a conversation | | send_sandbox_turn | write | agents:read | core | Send a sandbox turn | | get_sandbox_inbox | read | agents:read | full | Read what the agent sent a persona | | list_emulator_links | read | agents:read | core | List standalone emulator links | | create_emulator_link | destructive | agents:write | core | Create a standalone emulator link | | revoke_emulator_link | destructive | agents:write | full | Revoke a standalone emulator link | | create_emulator_grant | destructive | agents:read | full | Open the emulator now (short-lived grant) | | list_messages | read | messages:read | core | List messages | | list_sessions | read | messages:read | core | List sessions | | list_users | read | messages:read | full | List users | | list_logs | read | messages:read | core | List runtime logs | | list_turns | read | messages:read | full | List turn traces | | list_activity | read | messages:read | core | List activity feed | | get_org | read | (any) | core | Get org | | update_org | write | org:admin | full | Update org | | list_api_keys | read | org:admin | full | List API keys | | get_api_key | read | org:admin | full | Get API key | | list_webhooks | read | webhooks:manage | full | List webhooks | | get_webhook | read | webhooks:manage | full | Get webhook | | create_webhook | write | webhooks:manage | full | Create webhook | | update_webhook | write | webhooks:manage | full | Update webhook | | delete_webhook | destructive | webhooks:manage | full | Delete webhook | | rotate_webhook_secret | destructive | webhooks:manage | full | Rotate webhook signing secret | | search_docs | read | (none — public docs) | core | Search Anychat docs | | list_docs | read | (none — public docs) | core | List Anychat docs pages | | read_doc | read | (none — public docs) | core | Read an Anychat docs page |

Contract drift check

The tool table is a 1:1 projection of the Agent API reference, so a route added to the reference without a matching tool is drift. npm run drift (after npm run build) fetches the live reference, parses its | Method | Path | route tables, reads the route each tool declares in its description (Maps to GET /v1/…), and reports:

  • Missing — documented routes with no tool. Fails (exit 1) unless the route has a reasoned entry in drift-allowlist.json.
  • Undocumented — tool routes the reference doesn't list. Warning only.
  • Stale allowlist — entries that no longer match anything. Warning from the script; the test suite fails on them.

--file <path> checks a local copy of the reference, --json prints the report as JSON. The nightly workflow runs it against docs.anychat.ai and opens (or refreshes) an issue titled "Contract drift: documented /v1 routes without MCP tools" when it fails.

Programmatic use

import { AnychatClient, createServer } from '@anychat-ai/mcp';
const client = new AnychatClient({ apiKey: process.env.ANYCHAT_API_KEY! });
const server = createServer({ client }); // an McpServer — attach any transport
// createServer({ client, profile: 'core' }) registers only the core tool set

Security

  • The server holds no credentials of its own; every request carries the key you gave it, and the Anychat API enforces the key's org, role and scopes exactly as it would for you.
  • Treat tool results as data: they contain your agents' configuration and your customers' records.
  • Requests are tagged X-Anychat-Agent: mcp so they can be told apart in your access logs.

License

MIT © Redirect Ventures Inc.