claude-plugins-official Documentation

Official, Anthropic-managed directory of high quality Claude Code Plugins.

33,465 stars Python Python 1 file ยท ~5,860 tokens #claude-code#mcp#skills
RAW Doc

File: README.md

Claude Code Plugins Directory

A curated directory of high-quality plugins for Claude Code.

โš ๏ธ Important: Make sure you trust a plugin before installing, updating, or using it. Anthropic does not control what MCP servers, files, or other software are included in plugins and cannot verify that they will work as intended or that they won't change. See each plugin's homepage for more information.

Structure

  • /plugins - Internal plugins developed and maintained by Anthropic
  • /external_plugins - Third-party plugins from partners and the community

Installation

Plugins can be installed directly from this marketplace via Claude Code's plugin system.

To install, run /plugin install {plugin-name}@claude-plugins-official

or browse for the plugin in /plugin > Discover

Contributing

Internal Plugins

Internal plugins are developed by Anthropic team members. See /plugins/example-plugin for a reference implementation.

External Plugins

Third-party partners can submit plugins for inclusion in the marketplace. External plugins must meet quality and security standards for approval. To submit a new plugin, use the plugin directory submission form.

Plugin Structure

Each plugin follows a standard structure:

text
plugin-name/
โ”œโ”€โ”€ .claude-plugin/
โ”‚   โ””โ”€โ”€ plugin.json      # Plugin metadata (required)
โ”œโ”€โ”€ .mcp.json            # MCP server configuration (optional)
โ”œโ”€โ”€ commands/            # Slash commands (optional)
โ”œโ”€โ”€ agents/              # Agent definitions (optional)
โ”œโ”€โ”€ skills/              # Skill definitions (optional)
โ””โ”€โ”€ README.md            # Documentation

Plugin names are immutable

The name field in a marketplace entry is an immutable slug. Once a plugin has been published, its name must not change โ€” users have it installed under that slug, and renaming it breaks their install with a plugin-not-found error.

  • To change how a plugin is labeled in the UI, set or update displayName instead.
  • If a rename is genuinely unavoidable, add an entry to the top-level renames map in .claude-plugin/marketplace.json so existing installs auto-migrate:
json
"renames": {
  "old-name": "new-name"
}

The Claude Code plugin loader reads this map and transparently rewrites the old slug to the new one on the user's next sync.

Skill-bundle plugins

When a plugin's source repository ships skills (SKILL.md files) without a .claude-plugin/plugin.json manifest, the marketplace entry can declare the skills directly using strict: false and an explicit skills array.

json
{
  "name": "example-bundle",
  "description": "Brief description of the bundled skills.",
  "author": { "name": "Author Name" },
  "category": "development",
  "source": {
    "source": "git-subdir",
    "url": "https://github.com/example-org/sdk.git",
    "path": "packages/agent-skills",
    "ref": "main",
    "sha": "<commit sha>"
  },
  "strict": false,
  "skills": [
    "./skill-a",
    "./skill-b",
    "./skill-c"
  ],
  "homepage": "https://github.com/example-org/sdk"
}

Each path in skills is relative to source.path and points at a directory containing a SKILL.md. Paths can reach deeper than a single level โ€” for example, ["./libA/skill-1", "./libB/skill-2"] exposes a curated subset across multiple library subdirectories. Each skill is registered as :<skill-name> in Claude Code.

For the underlying schema, see Strict mode in the marketplace documentation.

License

Please see each linked plugin for the relevant LICENSE file.

Documentation

For more information on developing Claude Code plugins, see the official documentation.


File: external_plugins/telegram/README.md

Telegram

Connect a Telegram bot to your Claude Code with an MCP server.

The MCP server logs into Telegram as a bot and provides tools to Claude to reply, react, or edit messages. When you message the bot, the server forwards the message to your Claude Code session.

Prerequisites

  • Bun โ€” the MCP server runs on Bun. Install with curl -fsSL https://bun.sh/install | bash.

Quick Setup

Default pairing flow for a single-user DM bot. See ACCESS.md for groups and multi-user setups.

1. Create a bot with BotFather.

Open a chat with @BotFather on Telegram and send /newbot. BotFather asks for two things:

  • Name โ€” the display name shown in chat headers (anything, can contain spaces)
  • Username โ€” a unique handle ending in bot (e.g. my_assistant_bot). This becomes your bot's link: t.me/my_assistant_bot.

BotFather replies with a token that looks like 123456789:AAHfiqksKZ8... โ€” that's the whole token, copy it including the leading number and colon.

2. Install the plugin.

These are Claude Code commands โ€” run claude to start a session first.

Install the plugin:

text
/plugin install telegram@claude-plugins-official

3. Give the server the token.

text
/telegram:configure 123456789:AAHfiqksKZ8...

Writes TELEGRAM_BOT_TOKEN=... to ~/.claude/channels/telegram/.env. You can also write that file by hand, or set the variable in your shell environment โ€” shell takes precedence.

To run multiple bots on one machine (different tokens, separate allowlists), point TELEGRAM_STATE_DIR at a different directory per instance.

4. Relaunch with the channel flag.

The server won't connect without this โ€” exit your session and start a new one:

sh
claude --channels plugin:telegram@claude-plugins-official

5. Pair.

With Claude Code running from the previous step, DM your bot on Telegram โ€” it replies with a 6-character pairing code. If the bot doesn't respond, make sure your session is running with --channels. In your Claude Code session:

text
/telegram:access pair <code>

Your next DM reaches the assistant.

Unlike Discord, there's no server invite step โ€” Telegram bots accept DMs immediately. Pairing handles the user-ID lookup so you never touch numeric IDs.

6. Lock it down.

Pairing is for capturing IDs. Once you're in, switch to allowlist so strangers don't get pairing-code replies. Ask Claude to do it, or /telegram:access policy allowlist directly.

Access control

See ACCESS.md for DM policies, groups, mention detection, delivery config, skill commands, and the access.json schema.

Quick reference: IDs are numeric user IDs (get yours from @userinfobot). Default policy is pairing. ackReaction only accepts Telegram's fixed emoji whitelist.

Tools exposed to the assistant

Tool Purpose
reply Send to a chat. Takes chat_id + text, optionally reply_to (message ID) for native threading and files (absolute paths) for attachments. Images (.jpg/.png/.gif/.webp) send as photos with inline preview; other types send as documents. Max 50MB each. Auto-chunks text; files send as separate messages after the text. Returns the sent message ID(s).
react Add an emoji reaction to a message by ID. Only Telegram's fixed whitelist is accepted (๐Ÿ‘ ๐Ÿ‘Ž โค ๐Ÿ”ฅ ๐Ÿ‘€ etc).
edit_message Edit a message the bot previously sent. Useful for "workingโ€ฆ" โ†’ result progress updates. Only works on the bot's own messages.

Inbound messages trigger a typing indicator automatically โ€” Telegram shows
"botname is typingโ€ฆ" while the assistant works on a response.

Photos

Inbound photos are downloaded to ~/.claude/channels/telegram/inbox/ and the
local path is included in the <channel> notification so the assistant can
Read it. Telegram compresses photos โ€” if you need the original file, send it
as a document instead (long-press โ†’ Send as File).

Telegram's Bot API exposes neither message history nor search. The bot
only sees messages as they arrive โ€” no fetch_messages tool exists. If the
assistant needs earlier context, it will ask you to paste or summarize.

This also means there's no download_attachment tool for historical messages
โ€” photos are downloaded eagerly on arrival since there's no way to fetch them
later.


File: external_plugins/imessage/README.md

iMessage

Connect iMessage to your Claude Code assistant. Reads ~/Library/Messages/chat.db directly for history, search, and new-message detection; sends via AppleScript to Messages.app. No external server, no background process to keep alive.

macOS only.

Quick setup

Default: text yourself. Other senders are dropped silently (no auto-reply) until you allowlist them. See ACCESS.md for groups and multi-user setups.

1. Grant Full Disk Access.

chat.db is protected by macOS TCC. The first time the server reads it, macOS pops a prompt asking if your terminal can access Messages โ€” click Allow. The prompt names whatever app launched bun (Terminal.app, iTerm, Ghostty, your IDE).

If you click Don't Allow, or the prompt never appears, grant it manually: System Settings โ†’ Privacy & Security โ†’ Full Disk Access โ†’ add your terminal. Without this the server exits immediately with authorization denied.

2. Install the plugin.

These are Claude Code commands โ€” run claude to start a session first.

Install the plugin. No env vars required.

text
/plugin install imessage@claude-plugins-official

3. Relaunch with the channel flag.

The server won't connect without this โ€” exit your session and start a new one:

sh
claude --channels plugin:imessage@claude-plugins-official

Check that /imessage:configure tab-completes.

4. Text yourself.

iMessage yourself from any device. It reaches the assistant immediately โ€” self-chat bypasses access control.

The first outbound reply triggers an Automation permission prompt ("Terminal wants to control Messages"). Click OK.

5. Decide who else gets in.

Nobody else's texts reach the assistant until you add their handle:

text
/imessage:access allow +15551234567

Handles are phone numbers (+15551234567) or Apple ID emails ([email protected]). If you're not sure what you want, ask Claude to review your setup.

How it works

Inbound Polls chat.db once a second for ROWID > watermark. Watermark initializes to MAX(ROWID) at boot โ€” old messages aren't replayed on restart.
Outbound osascript with tell application "Messages" to send โ€ฆ. Text and chat GUID pass through argv so there's no escaping footgun.
History & search Direct SQLite queries against chat.db. Full history โ€” not just messages since the server started.
Attachments chat.db stores absolute filesystem paths. The first inbound image per message is surfaced to the assistant as a local path it can Read. Outbound attachments send as separate messages after the text.

Environment variables

Variable Default Effect
IMESSAGE_APPEND_SIGNATURE true Appends \nSent by Claude to outbound messages. Set to false to disable.
IMESSAGE_ALLOW_SMS false Accept inbound SMS/RCS in addition to iMessage. Off by default because SMS sender IDs are spoofable โ€” a forged SMS from your own number would otherwise bypass access control. Only enable if you understand the risk.
IMESSAGE_ACCESS_MODE โ€” Set to static to disable runtime pairing and read access.json only.
IMESSAGE_STATE_DIR ~/.claude/channels/imessage Override where access.json and pairing state live.

Access control

See ACCESS.md for DM policies, groups, self-chat, delivery config, skill commands, and the access.json schema.

Quick reference: IDs are handle addresses (+15551234567 or [email protected]). Default policy is allowlist โ€” this reads your personal chat.db. Self-chat always bypasses the gate.

Tools exposed to the assistant

Tool Purpose
reply Send to a chat. chat_id + text, optional files (absolute paths). Auto-chunks text; files send as separate messages.
chat_messages Fetch recent history as conversation threads. Each thread is labelled DM or Group with its participant list, then timestamped messages (oldest-first). Omit chat_guid to see every allowlisted chat at once, or pass one to drill in. Default 100 messages per chat. Reads chat.db directly โ€” full native history.

What you don't get

AppleScript can send messages but not tapback, edit, or thread โ€” those require Apple's private API. If you need them, look at BlueBubbles (requires disabling SIP).


File: external_plugins/greptile/README.md

Greptile

Greptile is an AI code review agent for GitHub and GitLab that automatically reviews pull requests. This plugin connects Claude Code to your Greptile account, letting you view and resolve Greptile's review comments directly from your terminal.

Setup

1. Create a Greptile Account

Sign up at greptile.com and connect your GitHub or GitLab repositories.

2. Get Your API Key

  1. Go to API Settings
  2. Generate a new API key
  3. Copy the key

3. Set Environment Variable

Add to your shell profile (.bashrc, .zshrc, etc.):

bash
export GREPTILE_API_KEY="your-api-key-here"

Then reload your shell or run source ~/.zshrc.

Available Tools

Pull Request Tools

  • list_pull_requests - List PRs with optional filtering by repo, branch, author, or state
  • get_merge_request - Get detailed PR info including review analysis
  • list_merge_request_comments - Get all comments on a PR with filtering options

Code Review Tools

  • list_code_reviews - List code reviews with optional filtering
  • get_code_review - Get detailed code review information
  • trigger_code_review - Start a new Greptile review on a PR
  • search_greptile_comments - Search across all Greptile review comments

Custom Context Tools

  • list_custom_context - List your organization's coding patterns and rules
  • get_custom_context - Get details for a specific pattern
  • search_custom_context - Search patterns by content
  • create_custom_context - Create a new coding pattern

Example Usage

Ask Claude Code to:

  • "Show me Greptile's comments on my current PR and help me resolve them"
  • "What issues did Greptile find on PR #123?"
  • "Trigger a Greptile review on this branch"

Documentation

For more information, visit greptile.com/docs.


File: external_plugins/fakechat/README.md

fakechat

Simple UI for testing the channel contract without an
external service. Open a browser, type, messages go to your Claude Code
session, replies come back.

Setup

These are Claude Code commands โ€” run claude to start a session first.

Install the plugin:

text
/plugin install fakechat@claude-plugins-official

Relaunch with the channel flag โ€” the server won't connect without this. Exit your session and start a new one:

sh
claude --channels plugin:fakechat@claude-plugins-official

The server prints the URL to stderr on startup:

text
fakechat: http://localhost:8787

Open it. Type. The assistant replies in-thread.

Set FAKECHAT_PORT to change the port.

Tools

Tool Purpose
reply Send to the UI. Takes text, optionally reply_to (message ID) and files (absolute path, 50MB). Attachment shows as [filename] under the text.
edit_message Edit a previously-sent message in place.

Inbound images/files save to ~/.claude/channels/fakechat/inbox/ and the path
is included in the notification. Outbound files are copied to outbox/ and
served over HTTP.

Not a real channel

There's no history, no search, no access.json, no skill. Single browser tab,
fresh on every reload. This is a dev tool, not a messaging bridge.


File: external_plugins/discord/README.md

Discord

Connect a Discord bot to your Claude Code with an MCP server.

When the bot receives a message, the MCP server forwards it to Claude and provides tools to reply, react, and edit messages.

Prerequisites

  • Bun โ€” the MCP server runs on Bun. Install with curl -fsSL https://bun.sh/install | bash.

Quick Setup

Default pairing flow for a single-user DM bot. See ACCESS.md for groups and multi-user setups.

1. Create a Discord application and bot.

Go to the Discord Developer Portal and click New Application. Give it a name.

Navigate to Bot in the sidebar. Give your bot a username.

Scroll down to Privileged Gateway Intents and enable Message Content Intent โ€” without this the bot receives messages with empty content.

2. Generate a bot token.

Still on the Bot page, scroll up to Token and press Reset Token. Copy the token โ€” it's only shown once. Hold onto it for step 5.

3. Invite the bot to a server.

Discord won't let you DM a bot unless you share a server with it.

Navigate to OAuth2 โ†’ URL Generator. Select the bot scope. Under Bot Permissions, enable:

  • View Channels
  • Send Messages
  • Send Messages in Threads
  • Read Message History
  • Attach Files
  • Add Reactions

Integration type: Guild Install. Copy the Generated URL, open it, and add the bot to any server you're in.

For DM-only use you technically need zero permissions โ€” but enabling them now saves a trip back when you want guild channels later.

4. Install the plugin.

These are Claude Code commands โ€” run claude to start a session first.

Install the plugin:

text
/plugin install discord@claude-plugins-official

5. Give the server the token.

text
/discord:configure MTIz...

Writes DISCORD_BOT_TOKEN=... to ~/.claude/channels/discord/.env. You can also write that file by hand, or set the variable in your shell environment โ€” shell takes precedence.

To run multiple bots on one machine (different tokens, separate allowlists), point DISCORD_STATE_DIR at a different directory per instance.

6. Relaunch with the channel flag.

The server won't connect without this โ€” exit your session and start a new one:

sh
claude --channels plugin:discord@claude-plugins-official

7. Pair.

With Claude Code running from the previous step, DM your bot on Discord โ€” it replies with a pairing code. If the bot doesn't respond, make sure your session is running with --channels. In your Claude Code session:

text
/discord:access pair <code>

Your next DM reaches the assistant.

8. Lock it down.

Pairing is for capturing IDs. Once you're in, switch to allowlist so strangers don't get pairing-code replies. Ask Claude to do it, or /discord:access policy allowlist directly.

Access control

See ACCESS.md for DM policies, guild channels, mention detection, delivery config, skill commands, and the access.json schema.

Quick reference: IDs are Discord snowflakes (numeric โ€” enable Developer Mode, right-click โ†’ Copy ID). Default policy is pairing. Guild channels are opt-in per channel ID.

Tools exposed to the assistant

Tool Purpose
reply Send to a channel. Takes chat_id + text, optionally reply_to (message ID) for native threading and files (absolute paths) for attachments โ€” max 10 files, 25MB each. Auto-chunks; files attach to the first chunk. Returns the sent message ID(s).
react Add an emoji reaction to any message by ID. Unicode emoji work directly; custom emoji need <:name:id> form.
edit_message Edit a message the bot previously sent. Useful for "workingโ€ฆ" โ†’ result progress updates. Only works on the bot's own messages.
fetch_messages Pull recent history from a channel (oldest-first). Capped at 100 per call. Each line includes the message ID so the model can reply_to it; messages with attachments are marked +Natt. Discord's search API isn't exposed to bots, so this is the only lookback.
download_attachment Download all attachments from a specific message by ID to ~/.claude/channels/discord/inbox/. Returns file paths + metadata. Use when fetch_messages shows a message has attachments.

Inbound messages trigger a typing indicator automatically โ€” Discord shows
"botname is typingโ€ฆ" while the assistant works on a response.

Attachments

Attachments are not auto-downloaded. The <channel> notification lists
each attachment's name, type, and size โ€” the assistant calls
download_attachment(chat_id, message_id) when it actually wants the file.
Downloads land in ~/.claude/channels/discord/inbox/.

Same path for attachments on historical messages found via fetch_messages
(messages with attachments are marked +Natt).


File: plugins/typescript-lsp/README.md

typescript-lsp

TypeScript/JavaScript language server for Claude Code, providing code intelligence features like go-to-definition, find references, and error checking.

Supported Extensions

.ts, .tsx, .js, .jsx, .mts, .cts, .mjs, .cjs

Installation

Install the TypeScript language server globally via npm:

bash
npm install typescript-language-server typescript

Or with yarn:

bash
yarn global add typescript-language-server typescript

More Information


File: plugins/swift-lsp/README.md

swift-lsp

Swift language server (SourceKit-LSP) for Claude Code, providing code intelligence for Swift projects.

Supported Extensions

.swift

Installation

SourceKit-LSP is included with the Swift toolchain.

macOS

Install Xcode from the App Store, or install Swift via:

bash
brew install swift

Linux

Download and install Swift from swift.org.

After installation, sourcekit-lsp should be available in your PATH.

More Information


File: plugins/skill-creator/README.md

skill-creator

Create new skills, improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, or benchmark skill performance with variance analysis.


File: plugins/rust-analyzer-lsp/README.md

rust-analyzer-lsp

Rust language server for Claude Code, providing code intelligence and analysis.

Supported Extensions

.rs

Installation

bash
rustup component add rust-analyzer

Via Homebrew (macOS)

bash
brew install rust-analyzer

Via package manager (Linux)

bash
# Ubuntu/Debian
sudo apt install rust-analyzer

# Arch Linux
sudo pacman -S rust-analyzer

Manual download

Download pre-built binaries from the releases page.

More Information