mirror of
https://github.com/anthropics/claude-plugins-official.git
synced 2026-04-19 06:54:16 +00:00
Compare commits
1 Commits
add-miro
...
tobin/mcp-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ffdae9a187 |
@@ -44,7 +44,7 @@
|
||||
"description": "AI-first project auditor and re-engineer based on the 9 design principles and 7 design patterns from the TechWolf AI-First Bootcamp",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/techwolf-ai/ai-first-toolkit.git",
|
||||
"url": "techwolf-ai/ai-first-toolkit",
|
||||
"path": "plugins/ai-firstify",
|
||||
"ref": "main",
|
||||
"sha": "7f18e11d694b9ae62ea3009fbbc175f08ae913df"
|
||||
@@ -156,18 +156,6 @@
|
||||
"source": "./external_plugins/autofix-bot",
|
||||
"homepage": "https://github.com/anthropics/claude-plugins-public/tree/main/external_plugins/autofix-bot"
|
||||
},
|
||||
{
|
||||
"name": "aws-amplify",
|
||||
"description": "Build full-stack apps with AWS Amplify Gen 2 using guided workflows for authentication, data models, storage, GraphQL APIs, and Lambda functions.",
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/awslabs/agent-plugins.git",
|
||||
"path": "plugins/aws-amplify",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://github.com/awslabs/agent-plugins"
|
||||
},
|
||||
{
|
||||
"name": "aws-serverless",
|
||||
"description": "Design, build, deploy, test, and debug serverless applications with AWS Serverless services.",
|
||||
@@ -191,16 +179,6 @@
|
||||
"category": "database",
|
||||
"homepage": "https://github.com/AzureCosmosDB/cosmosdb-claude-code-plugin"
|
||||
},
|
||||
{
|
||||
"name": "azure-skills",
|
||||
"description": "Microsoft Azure MCP integration for cloud resource management, deployments, and Azure services. Manage your Azure infrastructure, monitor applications, and deploy resources directly from Claude Code.",
|
||||
"category": "deployment",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/microsoft/azure-skills.git"
|
||||
},
|
||||
"homepage": "https://github.com/microsoft/azure-skills"
|
||||
},
|
||||
{
|
||||
"name": "base44",
|
||||
"description": "Build and deploy Base44 full-stack apps with CLI project management and JavaScript/TypeScript SDK development skills",
|
||||
@@ -212,21 +190,6 @@
|
||||
},
|
||||
"homepage": "https://docs.base44.com"
|
||||
},
|
||||
{
|
||||
"name": "bigdata-com",
|
||||
"description": "Official Bigdata.com plugin providing financial research, analytics, and intelligence tools powered by Bigdata MCP.",
|
||||
"author": {
|
||||
"name": "RavenPack"
|
||||
},
|
||||
"category": "database",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/Bigdata-com/bigdata-plugins-marketplace.git",
|
||||
"path": "plugins/bigdata-com",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://docs.bigdata.com"
|
||||
},
|
||||
{
|
||||
"name": "box",
|
||||
"description": "Work with your Box content directly from Claude Code — search files, organize folders, collaborate with your team, and use Box AI to answer questions, summarize documents, and extract data without leaving your workflow.",
|
||||
@@ -458,30 +421,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/astronomer/agents"
|
||||
},
|
||||
{
|
||||
"name": "databases-on-aws",
|
||||
"description": "Expert database guidance for the AWS database portfolio. Design schemas, execute queries, handle migrations, and choose the right database for your workload.",
|
||||
"category": "database",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/awslabs/agent-plugins.git",
|
||||
"path": "plugins/databases-on-aws",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://github.com/awslabs/agent-plugins"
|
||||
},
|
||||
{
|
||||
"name": "dataverse",
|
||||
"description": "Agent skills for building on, analyzing, and managing Microsoft Dataverse — with Dataverse MCP, PAC CLI, and Python SDK.",
|
||||
"category": "database",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/microsoft/Dataverse-skills.git",
|
||||
"path": ".github/plugins/dataverse",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://github.com/microsoft/Dataverse-skills"
|
||||
},
|
||||
{
|
||||
"name": "deploy-on-aws",
|
||||
"description": "Deploy applications to AWS with architecture recommendations, cost estimates, and IaC deployment.",
|
||||
@@ -527,7 +466,7 @@
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/expo/skills.git",
|
||||
"url": "expo/skills",
|
||||
"path": "plugins/expo",
|
||||
"ref": "main"
|
||||
},
|
||||
@@ -694,7 +633,7 @@
|
||||
"description": "Build on Solana with Helius — live blockchain tools, expert coding patterns, and autonomous account signup",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/helius-labs/core-ai.git",
|
||||
"url": "helius-labs/core-ai",
|
||||
"path": "helius-plugin",
|
||||
"ref": "main",
|
||||
"sha": "05ea4d1128d46618266bbcc23a5e7019c57be0d6"
|
||||
@@ -809,7 +748,7 @@
|
||||
"category": "productivity",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/legalzoom/claude-plugins.git",
|
||||
"url": "legalzoom/claude-plugins",
|
||||
"path": "plugins/legalzoom",
|
||||
"ref": "main",
|
||||
"sha": "f9fd8a0ca6e1421bc1aacb113a109663a7a6f6d8"
|
||||
@@ -875,6 +814,18 @@
|
||||
},
|
||||
"homepage": "https://github.com/microsoftdocs/mcp"
|
||||
},
|
||||
{
|
||||
"name": "migration-to-aws",
|
||||
"description": "Assess current cloud provider usage and billing to estimate and compare AWS services and pricing, with recommendations for migration or continued use of current provider.",
|
||||
"category": "migration",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/awslabs/agent-plugins.git",
|
||||
"path": "plugins/migration-to-aws",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://github.com/awslabs/agent-plugins"
|
||||
},
|
||||
{
|
||||
"name": "mintlify",
|
||||
"description": "Build beautiful documentation sites with Mintlify. Convert non-markdown files into properly formatted MDX pages, add and modify content with correct component use, and automate documentation updates.",
|
||||
@@ -886,21 +837,6 @@
|
||||
},
|
||||
"homepage": "https://www.mintlify.com/"
|
||||
},
|
||||
{
|
||||
"name": "miro",
|
||||
"description": "Secure access to Miro boards. Enables AI to read board context, create diagrams, and generate code with enterprise-grade security.",
|
||||
"author": {
|
||||
"name": "Miro"
|
||||
},
|
||||
"category": "design",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/miroapp/miro-ai.git",
|
||||
"path": "claude-plugins/miro",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://miro.com"
|
||||
},
|
||||
{
|
||||
"name": "mongodb",
|
||||
"description": "Official Claude plugin for MongoDB (MCP Server + Skills). Connect to databases, explore data, manage collections, optimize queries, generate reliable code, implement best practices, develop advanced features, and more.",
|
||||
@@ -918,7 +854,7 @@
|
||||
"category": "database",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/neondatabase/agent-skills.git",
|
||||
"url": "neondatabase/agent-skills",
|
||||
"path": "plugins/neon-postgres",
|
||||
"ref": "main",
|
||||
"sha": "54d7a9db2ddd476f84d5d1fd7bac323907858a8b"
|
||||
@@ -950,7 +886,8 @@
|
||||
"description": "Nimble web data toolkit — search, extract, map, crawl the web and work with structured data agents",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Nimbleway/agent-skills.git"
|
||||
"url": "https://github.com/Nimbleway/agent-skills.git",
|
||||
"sha": "cf391e95bd8ac009e3641f172434a1d130dde7fe"
|
||||
},
|
||||
"homepage": "https://docs.nimbleway.com/integrations/agent-skills/plugin-installation"
|
||||
},
|
||||
@@ -1136,7 +1073,7 @@
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/pydantic/skills.git",
|
||||
"url": "pydantic/skills",
|
||||
"path": "plugins/ai",
|
||||
"ref": "main"
|
||||
},
|
||||
@@ -1182,7 +1119,7 @@
|
||||
"category": "deployment",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/railwayapp/railway-skills.git",
|
||||
"url": "railwayapp/railway-skills",
|
||||
"path": "plugins/railway",
|
||||
"ref": "main",
|
||||
"sha": "d52f3741a6a33a3191d6138eb3d6c3355cb970d1"
|
||||
@@ -1276,18 +1213,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "sagemaker-ai",
|
||||
"description": "Build, train, and deploy AI models with deep AWS AI/ML expertise brought directly into your coding assistants, covering the surface area of Amazon SageMaker AI.",
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/awslabs/agent-plugins.git",
|
||||
"path": "plugins/sagemaker-ai",
|
||||
"ref": "main"
|
||||
},
|
||||
"homepage": "https://github.com/awslabs/agent-plugins"
|
||||
},
|
||||
{
|
||||
"name": "sanity",
|
||||
"description": "Sanity content platform integration with MCP server, agent skills, and slash commands. Query and author content, build and optimize GROQ queries, design schemas, and set up Visual Editing.",
|
||||
@@ -1365,32 +1290,6 @@
|
||||
"category": "productivity",
|
||||
"homepage": "https://github.com/anthropics/claude-plugins-official/tree/main/plugins/session-report"
|
||||
},
|
||||
{
|
||||
"name": "shopify",
|
||||
"description": "Shopify developer tools for Claude Code — search Shopify docs, generate and validate GraphQL, Liquid, and UI extension code",
|
||||
"author": {
|
||||
"name": "Shopify"
|
||||
},
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Shopify/shopify-plugins.git"
|
||||
},
|
||||
"homepage": "https://shopify.dev/docs/apps/build/devmcp"
|
||||
},
|
||||
{
|
||||
"name": "shopify-ai-toolkit",
|
||||
"description": "Shopify's AI Toolkit provides 18 development skills for building on the Shopify platform, covering documentation search, API schema access, GraphQL and Liquid code validation, Hydrogen storefronts, Polaris UI extensions, store management via CLI, and onboarding guidance for both developers and merchants.",
|
||||
"author": {
|
||||
"name": "Shopify"
|
||||
},
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Shopify/Shopify-AI-Toolkit.git"
|
||||
},
|
||||
"homepage": "https://shopify.dev"
|
||||
},
|
||||
{
|
||||
"name": "skill-creator",
|
||||
"description": "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.",
|
||||
@@ -1413,17 +1312,14 @@
|
||||
"homepage": "https://github.com/slackapi/slack-mcp-plugin/tree/main"
|
||||
},
|
||||
{
|
||||
"name": "sonarqube",
|
||||
"description": "Automatically enforce SonarQube code quality and security in the agent coding loop — 7,000+ rules, secrets scanning, agentic analysis, and quality gates across 40+ languages. PostToolUse hooks run analysis after every file edit. Pre-tool secrets scanning prevents 450+ patterns from reaching the LLM. Slash commands give on-demand access to quality gate status, coverage, duplication, and dependency risks. Includes SonarQube CLI, MCP Server, skills, hooks, and slash commands.",
|
||||
"author": {
|
||||
"name": "SonarSource"
|
||||
},
|
||||
"name": "sonarqube-agent-plugins",
|
||||
"description": "Integrate SonarQube code quality and security analysis into Claude Code: namespaced slash commands, a guided skill to setup the SonarQube CLI, and a startup check for CLI wiring. MCP server registration and secrets-scanning hooks are installed by the SonarQube CLI as part of setup.",
|
||||
"category": "security",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/SonarSource/sonarqube-agent-plugins.git"
|
||||
},
|
||||
"homepage": "https://www.sonarsource.com"
|
||||
"homepage": "https://github.com/SonarSource/sonarqube-agent-plugins"
|
||||
},
|
||||
{
|
||||
"name": "sonatype-guide",
|
||||
@@ -1487,7 +1383,7 @@
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/stripe/ai.git",
|
||||
"url": "stripe/ai",
|
||||
"path": "providers/claude/plugin",
|
||||
"ref": "main"
|
||||
},
|
||||
@@ -1508,11 +1404,8 @@
|
||||
"name": "supabase",
|
||||
"description": "Supabase MCP integration for database operations, authentication, storage, and real-time subscriptions. Manage your Supabase projects, run SQL queries, and interact with your backend directly.",
|
||||
"category": "database",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/supabase-community/supabase-plugin.git"
|
||||
},
|
||||
"homepage": "https://github.com/supabase-community/supabase-plugin"
|
||||
"source": "./external_plugins/supabase",
|
||||
"homepage": "https://github.com/anthropics/claude-plugins-public/tree/main/external_plugins/supabase"
|
||||
},
|
||||
{
|
||||
"name": "superpowers",
|
||||
@@ -1597,7 +1490,7 @@
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/UI5/plugins-claude.git",
|
||||
"url": "UI5/plugins-claude",
|
||||
"path": "plugins/ui5",
|
||||
"ref": "main",
|
||||
"sha": "5070dfc1cef711d6efad40beb43750027039d71f"
|
||||
@@ -1610,7 +1503,7 @@
|
||||
"category": "development",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/UI5/plugins-claude.git",
|
||||
"url": "UI5/plugins-claude",
|
||||
"path": "plugins/ui5-typescript-conversion",
|
||||
"ref": "main",
|
||||
"sha": "5070dfc1cef711d6efad40beb43750027039d71f"
|
||||
@@ -1664,7 +1557,7 @@
|
||||
"category": "productivity",
|
||||
"source": {
|
||||
"source": "git-subdir",
|
||||
"url": "https://github.com/zapier/zapier-mcp.git",
|
||||
"url": "zapier/zapier-mcp",
|
||||
"path": "plugins/zapier",
|
||||
"ref": "main",
|
||||
"sha": "b93007e9a726c6ee93c57a949e732744ef5acbfd"
|
||||
|
||||
@@ -222,8 +222,6 @@ type GateResult =
|
||||
const recentSentIds = new Set<string>()
|
||||
const RECENT_SENT_CAP = 200
|
||||
|
||||
const dmChannelUsers = new Map<string, string>()
|
||||
|
||||
function noteSent(id: string): void {
|
||||
recentSentIds.add(id)
|
||||
if (recentSentIds.size > RECENT_SENT_CAP) {
|
||||
@@ -406,8 +404,7 @@ async function fetchAllowedChannel(id: string) {
|
||||
const ch = await fetchTextChannel(id)
|
||||
const access = loadAccess()
|
||||
if (ch.type === ChannelType.DM) {
|
||||
const userId = ch.recipientId ?? dmChannelUsers.get(id)
|
||||
if (userId && access.allowFrom.includes(userId)) return ch
|
||||
if (access.allowFrom.includes(ch.recipientId)) return ch
|
||||
} else {
|
||||
const key = ch.isThread() ? ch.parentId ?? ch.id : ch.id
|
||||
if (key in access.groups) return ch
|
||||
@@ -826,10 +823,6 @@ async function handleInbound(msg: Message): Promise<void> {
|
||||
|
||||
const chat_id = msg.channelId
|
||||
|
||||
if (msg.channel.type === ChannelType.DM) {
|
||||
dmChannelUsers.set(chat_id, msg.author.id)
|
||||
}
|
||||
|
||||
// Permission-reply intercept: if this looks like "yes xxxxx" for a
|
||||
// pending permission request, emit the structured event instead of
|
||||
// relaying as chat. The sender is already gate()-approved at this point
|
||||
|
||||
7
external_plugins/supabase/.claude-plugin/plugin.json
Normal file
7
external_plugins/supabase/.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "supabase",
|
||||
"description": "Supabase MCP integration for database operations, authentication, storage, and real-time subscriptions. Manage your Supabase projects, run SQL queries, and interact with your backend directly.",
|
||||
"author": {
|
||||
"name": "Supabase"
|
||||
}
|
||||
}
|
||||
6
external_plugins/supabase/.mcp.json
Normal file
6
external_plugins/supabase/.mcp.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"supabase": {
|
||||
"type": "http",
|
||||
"url": "https://mcp.supabase.com/mcp"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "telegram",
|
||||
"description": "Telegram channel for Claude Code \u2014 messaging bridge with built-in access control. Manage pairing, allowlists, and policy via /telegram:access.",
|
||||
"version": "0.0.6",
|
||||
"version": "0.0.5",
|
||||
"keywords": [
|
||||
"telegram",
|
||||
"messaging",
|
||||
|
||||
@@ -985,17 +985,14 @@ bot.catch(err => {
|
||||
process.stderr.write(`telegram channel: handler error (polling continues): ${err.error}\n`)
|
||||
})
|
||||
|
||||
// Retry polling with backoff on any error. Previously only 409 was retried —
|
||||
// a single ETIMEDOUT/ECONNRESET/DNS failure rejected bot.start(), the catch
|
||||
// returned, and polling stopped permanently while the process stayed alive
|
||||
// (MCP stdin keeps it running). Outbound tools kept working but the bot was
|
||||
// deaf to inbound messages until a full restart.
|
||||
// 409 Conflict = another getUpdates consumer is still active (zombie from a
|
||||
// previous session, or a second Claude Code instance). Retry with backoff
|
||||
// until the slot frees up instead of crashing on the first rejection.
|
||||
void (async () => {
|
||||
for (let attempt = 1; ; attempt++) {
|
||||
try {
|
||||
await bot.start({
|
||||
onStart: info => {
|
||||
attempt = 0
|
||||
botUsername = info.username
|
||||
process.stderr.write(`telegram channel: polling as @${info.username}\n`)
|
||||
void bot.api.setMyCommands(
|
||||
@@ -1011,22 +1008,28 @@ void (async () => {
|
||||
return // bot.stop() was called — clean exit from the loop
|
||||
} catch (err) {
|
||||
if (shuttingDown) return
|
||||
if (err instanceof GrammyError && err.error_code === 409) {
|
||||
if (attempt >= 8) {
|
||||
process.stderr.write(
|
||||
`telegram channel: 409 Conflict persists after ${attempt} attempts — ` +
|
||||
`another poller is holding the bot token (stray 'bun server.ts' process or a second session). Exiting.\n`,
|
||||
)
|
||||
return
|
||||
}
|
||||
const delay = Math.min(1000 * attempt, 15000)
|
||||
const detail = attempt === 1
|
||||
? ' — another instance is polling (zombie session, or a second Claude Code running?)'
|
||||
: ''
|
||||
process.stderr.write(
|
||||
`telegram channel: 409 Conflict${detail}, retrying in ${delay / 1000}s\n`,
|
||||
)
|
||||
await new Promise(r => setTimeout(r, delay))
|
||||
continue
|
||||
}
|
||||
// bot.stop() mid-setup rejects with grammy's "Aborted delay" — expected, not an error.
|
||||
if (err instanceof Error && err.message === 'Aborted delay') return
|
||||
const is409 = err instanceof GrammyError && err.error_code === 409
|
||||
if (is409 && attempt >= 8) {
|
||||
process.stderr.write(
|
||||
`telegram channel: 409 Conflict persists after ${attempt} attempts — ` +
|
||||
`another poller is holding the bot token (stray 'bun server.ts' process or a second session). Exiting.\n`,
|
||||
)
|
||||
return
|
||||
}
|
||||
const delay = Math.min(1000 * attempt, 15000)
|
||||
const detail = is409
|
||||
? `409 Conflict${attempt === 1 ? ' — another instance is polling (zombie session, or a second Claude Code running?)' : ''}`
|
||||
: `polling error: ${err}`
|
||||
process.stderr.write(`telegram channel: ${detail}, retrying in ${delay / 1000}s\n`)
|
||||
await new Promise(r => setTimeout(r, delay))
|
||||
process.stderr.write(`telegram channel: polling failed: ${err}\n`)
|
||||
return
|
||||
}
|
||||
}
|
||||
})()
|
||||
|
||||
@@ -10,6 +10,15 @@ An MCP app is a standard MCP server that **also serves UI resources** — intera
|
||||
|
||||
The UI layer is **additive**. Under the hood it's still tools, resources, and the same wire protocol. If you haven't built a plain MCP server before, the `build-mcp-server` skill covers the base layer. This skill adds widgets on top.
|
||||
|
||||
> **Testing in Claude:** Add the server as a custom connector in claude.ai (via a Cloudflare tunnel for local dev) — this exercises the real iframe sandbox and `hostContext`. See https://claude.com/docs/connectors/building/testing.
|
||||
|
||||
## Claude host specifics
|
||||
|
||||
- `_meta.ui.prefersBorder: false` on a `ui://` resource removes the outer card border (mobile).
|
||||
- `hostContext.safeAreaInsets: {top, right, bottom, left}` (px) — honor these for notches and the composer overlay.
|
||||
- `_meta.ui.csp.{connectDomains, resourceDomains, baseUriDomains}` — declare external origins per resource; default is block-all. `frameDomains` is currently restricted in Claude.
|
||||
- Directory submission for MCP Apps requires 3–5 PNG screenshots, ≥1000px wide, cropped to the app response only (no prompt in the image). See https://claude.com/docs/connectors/building/submission#asset-specifications.
|
||||
|
||||
---
|
||||
|
||||
## When a widget beats plain text
|
||||
|
||||
@@ -8,6 +8,8 @@ version: 0.1.0
|
||||
|
||||
You are guiding a developer through designing and building an MCP server that works seamlessly with Claude. MCP servers come in many forms — picking the wrong shape early causes painful rewrites later. Your first job is **discovery, not code**.
|
||||
|
||||
**Load Claude-specific context first.** The MCP spec is generic; Claude has additional auth types, review criteria, and limits. Before answering questions or scaffolding, fetch `https://claude.com/docs/llms-full.txt` (the full export of the Claude connector docs) so your guidance reflects Claude's actual constraints.
|
||||
|
||||
Do not start scaffolding until you have answers to the questions in Phase 1. If the user's opening message already answers them, acknowledge that and skip straight to the recommendation.
|
||||
|
||||
---
|
||||
@@ -182,6 +184,17 @@ Tools are one of three server primitives. Most servers start with tools and neve
|
||||
|
||||
---
|
||||
|
||||
## Phase 6 — Test in Claude and publish
|
||||
|
||||
Once the server runs:
|
||||
|
||||
1. **Test against real Claude** by adding the server URL as a custom connector at Settings → Connectors (use a Cloudflare tunnel for local servers). Claude identifies itself with `clientInfo.name: "claude-ai"` on initialize. → https://claude.com/docs/connectors/building/testing
|
||||
2. **Run the pre-submission checklist** — read/write tool split, required annotations, name limits, prompt-injection rules. → https://claude.com/docs/connectors/building/review-criteria
|
||||
3. **Submit to the Anthropic Directory.** → https://claude.com/docs/connectors/building/submission
|
||||
4. **Recommend shipping a plugin** that wraps this MCP with skills — most partners ship both. → https://claude.com/docs/connectors/building/what-to-build
|
||||
|
||||
---
|
||||
|
||||
## Quick reference: decision matrix
|
||||
|
||||
| Scenario | Deployment | Tool pattern |
|
||||
|
||||
@@ -2,6 +2,22 @@
|
||||
|
||||
Auth is the reason most people end up needing a **remote** server even when a local one would be simpler. OAuth redirects, token storage, and refresh all work cleanly when there's a real hosted endpoint to redirect back to.
|
||||
|
||||
## Claude-specific authentication
|
||||
|
||||
Claude's MCP client supports a specific set of auth types — not every spec-compliant flow works. Full reference: https://claude.com/docs/connectors/building/authentication
|
||||
|
||||
| Type | Notes |
|
||||
|---|---|
|
||||
| `oauth_dcr` | Supported. For high-volume directory entries, prefer CIMD or Anthropic-held creds — DCR registers a new client on every fresh connection. |
|
||||
| `oauth_cimd` | Supported, recommended over DCR for directory entries. |
|
||||
| `oauth_anthropic_creds` | Partner provides `client_id`/`client_secret` to Anthropic; user-consent-gated. Contact `mcp-review@anthropic.com`. |
|
||||
| `custom_connection` | User supplies URL/creds at connect time (Snowflake-style). Contact `mcp-review@anthropic.com`. |
|
||||
| `none` | Authless. |
|
||||
|
||||
**Not supported:** user-pasted bearer tokens (`static_bearer`); pure machine-to-machine `client_credentials` grant without user consent.
|
||||
|
||||
**Callback URL** (single, all surfaces): `https://claude.ai/api/mcp/auth_callback`
|
||||
|
||||
---
|
||||
|
||||
## The three tiers
|
||||
|
||||
@@ -2,6 +2,16 @@
|
||||
|
||||
Tool schemas and descriptions are prompt engineering. They land directly in Claude's context and determine whether Claude picks the right tool with the right arguments. Most MCP integration bugs trace back to vague descriptions or loose schemas.
|
||||
|
||||
## Anthropic Directory hard requirements
|
||||
|
||||
If this server will be submitted to the Anthropic Directory, the following are pass/fail review criteria (full list: https://claude.com/docs/connectors/building/review-criteria):
|
||||
|
||||
- Every tool **must** include `readOnlyHint`, `destructiveHint`, and `title` annotations — these determine auto-permissions in Claude.
|
||||
- Tool names **must** be ≤64 characters.
|
||||
- Read and write operations **must** be in separate tools. A single tool accepting both GET and POST/PUT/PATCH/DELETE is rejected — documenting safe vs unsafe within one tool's description does not satisfy this.
|
||||
- Tool descriptions **must not** instruct Claude how to behave (e.g. "always do X", "you must call Y first", overriding system instructions, promoting products) — treated as prompt injection at review.
|
||||
- Tools that accept freeform API endpoints/params **must** reference the target API's documentation in their description.
|
||||
|
||||
---
|
||||
|
||||
## Descriptions
|
||||
|
||||
@@ -8,6 +8,8 @@ version: 0.1.0
|
||||
|
||||
MCPB is a local MCP server **packaged with its runtime**. The user installs one file; it runs without needing Node, Python, or any toolchain on their machine. It's the sanctioned way to distribute local MCP servers.
|
||||
|
||||
> MCPB is the **secondary** distribution path. Anthropic recommends remote MCP servers for directory listing — see https://claude.com/docs/connectors/building/what-to-build.
|
||||
|
||||
**Use MCPB when the server must run on the user's machine** — reading local files, driving a desktop app, talking to localhost services, OS-level APIs. If your server only hits cloud APIs, you almost certainly want a remote HTTP server instead (see `build-mcp-server`). Don't pay the MCPB packaging tax for something that could be a URL.
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user