Compare commits

..

23 Commits

Author SHA1 Message Date
Bryan Thompson
db52e65c44 Add datadog plugin 2026-04-17 07:28:58 -05:00
Tobin South
b992a65037 Refresh AWS plugins: add amplify/databases/sagemaker, remove migration (#1226)
Adds three plugins from awslabs/agent-plugins:
- aws-amplify (development)
- databases-on-aws (database)
- sagemaker-ai (development)

Removes migration-to-aws (deprecated by the AWS team).
2026-04-17 06:29:23 -05:00
Dickson Tsai
de39da5ba2 Point supabase plugin to supabase-community/supabase-plugin (#1442)
Remove the in-repo supabase stub; source from the external repo.

Co-authored-by: Claude <noreply@anthropic.com>
2026-04-16 21:01:47 +01:00
Bryan Thompson
cb8c857a5e Normalize git-subdir source URLs to full HTTPS format (#1422)
Standardize 12 git-subdir plugin entries from owner/repo shorthand to
full https://github.com/owner/repo.git URLs for consistency with the
existing HTTPS entries.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 21:01:08 +01:00
Daisy S. Hollman
48aa435178 fix(discord): use cached author.id when DMChannel.recipientId is null (#1365)
DMChannel.recipientId can be null when client.channels.fetch() returns
a DM channel with a cold cache. The inbound gate correctly uses
msg.author.id, but fetchAllowedChannel relied on recipientId, so
replies to allowlisted DMs intermittently failed with "channel not
allowlisted" after session restart.

Maintain a channelId→userId map populated during inbound handling and
fall back to it when recipientId is null.

Fixes anthropics/claude-code#40576
Fixes anthropics/claude-code#41647

🏠 Remote-Dev: homespace
2026-04-14 14:46:42 -07:00
Noah Zweben
7e401edac7 fix(telegram): retry polling on all transient errors, not just 409 (#1397)
A single ETIMEDOUT/ECONNRESET/DNS failure during long-polling rejected
bot.start(); the catch block returned and polling stopped permanently.
The MCP server process stayed alive (stdin keeps it running), so outbound
reply/react tools kept working — but the bot was deaf to inbound messages
until a full restart. Users see 'typing...' then nothing, indistinguishable
from the harness-side gate bug.

Now all errors retry with the same capped backoff (max 15s). attempt resets
to 0 in onStart so backoff doesn't accumulate across a long-running session.

Co-authored-by: Claude <noreply@anthropic.com>
2026-04-14 12:47:13 -07:00
Bryan Thompson
7f3389d21f Merge pull request #1403 from anthropics/add-dataverse-v2
Add dataverse plugin
2026-04-14 11:59:10 -05:00
Bryan Thompson
560b7e0d38 Merge pull request #1402 from anthropics/add-azure-skills-v2
Add azure-skills plugin
2026-04-14 11:57:51 -05:00
Bryan Thompson
903a6aba48 Merge pull request #1409 from anthropics/add-shopify-ai-toolkit
Add shopify-ai-toolkit plugin
2026-04-14 11:57:45 -05:00
Bryan Thompson
dcd86cd6f9 Add shopify-ai-toolkit plugin 2026-04-14 11:54:28 -05:00
Bryan Thompson
985075c567 Merge pull request #1414 from anthropics/add-bigdata-com
Add bigdata-com plugin
2026-04-14 11:53:33 -05:00
Bryan Thompson
39353b5b42 Merge pull request #1413 from anthropics/update-plugin/nimble-remove-sha
Update nimble plugin: remove SHA pin
2026-04-14 11:53:30 -05:00
Bryan Thompson
507462e2fb Merge pull request #1408 from anthropics/add-shopify
Add shopify plugin
2026-04-14 11:53:25 -05:00
Bryan Thompson
d6fa70eb1a Merge pull request #1407 from anthropics/update-sonarqube
Update sonarqube plugin — rename, author, description
2026-04-14 11:53:20 -05:00
Bryan Thompson
8145923edc Remove SHA pin from azure-skills entry 2026-04-14 11:51:46 -05:00
Bryan Thompson
2b666914e6 Remove SHA pin from dataverse entry 2026-04-14 11:51:40 -05:00
Bryan Thompson
e8fb9898a6 Fix sort order: move shopify before skill-creator 2026-04-14 11:39:57 -05:00
Bryan Thompson
c28404f818 Add bigdata-com plugin 2026-04-14 11:29:03 -05:00
Bryan Thompson
fb48c3af93 Update nimble plugin: remove SHA pin
Allow Nimble to resolve from latest HEAD rather than a pinned commit.
2026-04-14 09:42:49 -05:00
Bryan Thompson
622ef85323 Add shopify plugin 2026-04-14 07:52:48 -05:00
Bryan Thompson
173bd29be3 Update sonarqube plugin entry — rename, author, description 2026-04-14 07:39:11 -05:00
Bryan Thompson
0de7a91403 Add dataverse plugin 2026-04-13 18:00:49 -05:00
Bryan Thompson
c5b7657350 Add azure-skills plugin 2026-04-13 18:00:31 -05:00
11 changed files with 164 additions and 118 deletions

View File

@@ -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": "techwolf-ai/ai-first-toolkit",
"url": "https://github.com/techwolf-ai/ai-first-toolkit.git",
"path": "plugins/ai-firstify",
"ref": "main",
"sha": "7f18e11d694b9ae62ea3009fbbc175f08ae913df"
@@ -156,6 +156,18 @@
"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.",
@@ -179,6 +191,16 @@
"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",
@@ -190,6 +212,21 @@
},
"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.",
@@ -421,6 +458,43 @@
},
"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": "datadog",
"description": "Use Datadog directly in Claude Code through a preconfigured Datadog MCP server. Query logs, metrics, traces, dashboards, and more through natural conversation. This plugin is in preview.",
"author": {
"name": "Datadog"
},
"category": "monitoring",
"source": {
"source": "url",
"url": "https://github.com/datadog-labs/claude-code-plugin.git"
},
"homepage": "https://www.datadoghq.com/"
},
{
"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.",
@@ -466,7 +540,7 @@
"category": "development",
"source": {
"source": "git-subdir",
"url": "expo/skills",
"url": "https://github.com/expo/skills.git",
"path": "plugins/expo",
"ref": "main"
},
@@ -633,7 +707,7 @@
"description": "Build on Solana with Helius — live blockchain tools, expert coding patterns, and autonomous account signup",
"source": {
"source": "git-subdir",
"url": "helius-labs/core-ai",
"url": "https://github.com/helius-labs/core-ai.git",
"path": "helius-plugin",
"ref": "main",
"sha": "05ea4d1128d46618266bbcc23a5e7019c57be0d6"
@@ -748,7 +822,7 @@
"category": "productivity",
"source": {
"source": "git-subdir",
"url": "legalzoom/claude-plugins",
"url": "https://github.com/legalzoom/claude-plugins.git",
"path": "plugins/legalzoom",
"ref": "main",
"sha": "f9fd8a0ca6e1421bc1aacb113a109663a7a6f6d8"
@@ -814,18 +888,6 @@
},
"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.",
@@ -854,7 +916,7 @@
"category": "database",
"source": {
"source": "git-subdir",
"url": "neondatabase/agent-skills",
"url": "https://github.com/neondatabase/agent-skills.git",
"path": "plugins/neon-postgres",
"ref": "main",
"sha": "54d7a9db2ddd476f84d5d1fd7bac323907858a8b"
@@ -886,8 +948,7 @@
"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",
"sha": "cf391e95bd8ac009e3641f172434a1d130dde7fe"
"url": "https://github.com/Nimbleway/agent-skills.git"
},
"homepage": "https://docs.nimbleway.com/integrations/agent-skills/plugin-installation"
},
@@ -1073,7 +1134,7 @@
"category": "development",
"source": {
"source": "git-subdir",
"url": "pydantic/skills",
"url": "https://github.com/pydantic/skills.git",
"path": "plugins/ai",
"ref": "main"
},
@@ -1119,7 +1180,7 @@
"category": "deployment",
"source": {
"source": "git-subdir",
"url": "railwayapp/railway-skills",
"url": "https://github.com/railwayapp/railway-skills.git",
"path": "plugins/railway",
"ref": "main",
"sha": "d52f3741a6a33a3191d6138eb3d6c3355cb970d1"
@@ -1213,6 +1274,18 @@
}
}
},
{
"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.",
@@ -1290,6 +1363,32 @@
"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.",
@@ -1312,14 +1411,17 @@
"homepage": "https://github.com/slackapi/slack-mcp-plugin/tree/main"
},
{
"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.",
"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"
},
"category": "security",
"source": {
"source": "url",
"url": "https://github.com/SonarSource/sonarqube-agent-plugins.git"
},
"homepage": "https://github.com/SonarSource/sonarqube-agent-plugins"
"homepage": "https://www.sonarsource.com"
},
{
"name": "sonatype-guide",
@@ -1383,7 +1485,7 @@
"category": "development",
"source": {
"source": "git-subdir",
"url": "stripe/ai",
"url": "https://github.com/stripe/ai.git",
"path": "providers/claude/plugin",
"ref": "main"
},
@@ -1404,8 +1506,11 @@
"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": "./external_plugins/supabase",
"homepage": "https://github.com/anthropics/claude-plugins-public/tree/main/external_plugins/supabase"
"source": {
"source": "url",
"url": "https://github.com/supabase-community/supabase-plugin.git"
},
"homepage": "https://github.com/supabase-community/supabase-plugin"
},
{
"name": "superpowers",
@@ -1490,7 +1595,7 @@
"category": "development",
"source": {
"source": "git-subdir",
"url": "UI5/plugins-claude",
"url": "https://github.com/UI5/plugins-claude.git",
"path": "plugins/ui5",
"ref": "main",
"sha": "5070dfc1cef711d6efad40beb43750027039d71f"
@@ -1503,7 +1608,7 @@
"category": "development",
"source": {
"source": "git-subdir",
"url": "UI5/plugins-claude",
"url": "https://github.com/UI5/plugins-claude.git",
"path": "plugins/ui5-typescript-conversion",
"ref": "main",
"sha": "5070dfc1cef711d6efad40beb43750027039d71f"
@@ -1557,7 +1662,7 @@
"category": "productivity",
"source": {
"source": "git-subdir",
"url": "zapier/zapier-mcp",
"url": "https://github.com/zapier/zapier-mcp.git",
"path": "plugins/zapier",
"ref": "main",
"sha": "b93007e9a726c6ee93c57a949e732744ef5acbfd"

View File

@@ -222,6 +222,8 @@ 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) {
@@ -404,7 +406,8 @@ async function fetchAllowedChannel(id: string) {
const ch = await fetchTextChannel(id)
const access = loadAccess()
if (ch.type === ChannelType.DM) {
if (access.allowFrom.includes(ch.recipientId)) return ch
const userId = ch.recipientId ?? dmChannelUsers.get(id)
if (userId && access.allowFrom.includes(userId)) return ch
} else {
const key = ch.isThread() ? ch.parentId ?? ch.id : ch.id
if (key in access.groups) return ch
@@ -823,6 +826,10 @@ 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

View File

@@ -1,7 +0,0 @@
{
"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"
}
}

View File

@@ -1,6 +0,0 @@
{
"supabase": {
"type": "http",
"url": "https://mcp.supabase.com/mcp"
}
}

View File

@@ -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.5",
"version": "0.0.6",
"keywords": [
"telegram",
"messaging",

View File

@@ -985,14 +985,17 @@ bot.catch(err => {
process.stderr.write(`telegram channel: handler error (polling continues): ${err.error}\n`)
})
// 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.
// 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.
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(
@@ -1008,28 +1011,22 @@ 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
process.stderr.write(`telegram channel: polling failed: ${err}\n`)
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))
}
}
})()

View File

@@ -10,15 +10,6 @@ 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 35 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

View File

@@ -8,8 +8,6 @@ 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.
---
@@ -184,17 +182,6 @@ 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 |

View File

@@ -2,22 +2,6 @@
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

View File

@@ -2,16 +2,6 @@
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

View File

@@ -8,8 +8,6 @@ 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.
---