Your MCP tool returns clean JSON. Half your clients never read it
a tool result can carry two copies of the same data: structuredContent (a JSON object) and content (text blocks). a client may only look at one of them.
the spec's rule: "a tool that returns structured content SHOULD also return the serialized JSON in a TextContent block." it's a SHOULD, so plenty of servers skip it. then a client that only reads content gets an empty result, while the data sits unread in structuredContent.
if you declare an outputSchema, the contract tightens:
- servers MUST return structured results that conform to it
- clients SHOULD validate them
so there are two ways to fail:
- server returns structuredContent only. text-only clients see nothing
- server declares a schema, then the data drifts (temperature comes back as "22.5°C" instead of a number). a client that skips validation passes it to the model as if it were fine
the fix: always return both. build content[0].text by serializing the same object you put in structuredContent, so they can't disagree. then call each tool once and check the real response against its own outputSchema.
two traps most people miss:
- adding a field to the output but not to "required" or the schema. the declared contract and the real result slowly diverge
- testing in one client only. try a second one that reads just content
the spec also says clients SHOULD validate tool results before passing them to the LLM, so treat that as a real step in your client.
pin the spec version you built against too (2025-06-18), this page changes.
source: MCP spec, Server > Tools (Structured Content, Output Schema)
check out the full spec below ↓ ↓
https://t.co/6my5M3PMHP
Database MCP servers have been blowing up lately.
If you want your agent to actually query and manage a database but don't know where to start, you can just copy this checklist.
1. supabase-mcp
Hosted endpoint at https://t.co/m41yKCdaKZ. The agent manages tables, fetches project config and queries data. Add read_only and project_ref URL params so it can only look at one project. https://t.co/NKywzA5g1C
2. mcp-server-neon
Remote Neon Postgres server. prepare_database_migration runs a schema change on a temporary branch first, and complete_database_migration applies it to main only after you confirm. https://t.co/XxCItzOFl8
3. postgres-mcp
Postgres MCP Pro: analyze_db_health checks indexes, vacuum and replication, get_top_queries finds slow queries, and analyze_workload_indexes recommends indexes. Restricted mode keeps SQL read-only for production. https://t.co/RVUVtkHGKg
4. mongodb-mcp-server
Run find, aggregate, explain and collection-schema on MongoDB, plus Atlas cluster tools. Start with --readOnly and write tools are never registered. https://t.co/6LAB7PpNm9
5. mcp-redis
Natural-language access to Redis strings, hashes, lists, sets, sorted sets, streams, pub/sub and JSON. Good for inspecting queues, sessions and leaderboards. https://t.co/B4WoBuB1qa
6. genai-toolbox (MCP Toolbox for Databases)
One server for AlloyDB, BigQuery, Postgres, MySQL, MongoDB, Redis and more. Start with --prebuilt, or define your own vetted queries as tools in tools.yaml. https://t.co/nBQ5APDwcm
Copy these complete database MCP blueprints, then read each README for the setup ↓ ↓
YOUR AGENT CAN NOW BUILD UNITY SCENES ON ITS OWN
Unity MCP connects the Unity Editor to MCP clients
creates scenes and GameObjects from plain language
edits C# scripts, manages assets, runs tests and builds
47 tool entrypoints with Roslyn script validation
works with Claude Desktop, Claude Code, Cursor, VS Code and Cline
https://t.co/QaWtAtfJpg
Your MCP tool says it's read-only. Your client shouldn't believe it
every tool can ship annotations: readOnlyHint, destructiveHint, idempotentHint, openWorldHint. most setups read them as facts and auto-approve based on them.
the spec calls them hints. the schema says they "are not guaranteed to provide a faithful description of tool behavior", and the Tools page says clients MUST consider annotations untrusted unless they come from trusted servers.
and the defaults point the other way from what you'd hope:
- readOnlyHint defaults to false
- destructiveHint defaults to true
- openWorldHint defaults to true
so a tool with no annotations is "may modify, may destroy, talks to the outside world". a tool from a malicious server can just claim readOnlyHint: true and skip your confirmation prompt.
the fix: decide trust per server, not per tool. allowlist the servers whose annotations you accept. for everything else, keep the confirmation prompt on, whatever the hints say.
two traps most people miss:
- treating "no annotations" as "safe". the defaults assume the opposite
- trusting a hint because the tool name sounds harmless. get_* can still write
pin the spec version you read this from too (2025-06-18), these pages change.
source: MCP spec, Server > Tools (Security) and schema.ts ToolAnnotations
check out the full spec below ↓ ↓
https://t.co/6my5M3PMHP
Browser MCP servers have been blowing up lately.
If you want your agent to actually use a browser but don't know where to start, you can just copy this checklist.
1. playwright-mcp
Drives a browser through the page's accessibility tree instead of screenshots, so no vision model is needed. The agent calls browser_navigate, browser_snapshot, browser_click and browser_fill_form. https://t.co/Elo1ySZ6kg
2. mcp-playwright
Same idea with extras: screenshots, test-code generation, JS execution, and 143 device presets for mobile viewport checks. Runs over stdio or HTTP. https://t.co/qGNjCWqDW4
3. firecrawl-mcp-server
When you don't need a browser window, only clean content: firecrawl_scrape for one URL, firecrawl_map to list a site's URLs, firecrawl_crawl for many pages, firecrawl_search for web search. https://t.co/cjnbonTyMi
4. chrome-devtools-mcp
Lets a coding agent inspect a live Chrome: record performance traces, read network requests, check console messages with source-mapped stack traces. Use it to debug your own site. https://t.co/YolN7gNuIS
5. mcp-chrome
A Chrome extension that gives the agent your everyday browser with your existing logins. 23 tools: tabs, screenshots, network capture, form filling, bookmark and history search. Runs fully locally. https://t.co/JObutdKANt
Copy these complete browser MCP blueprints, then read each README for the setup ↓ ↓
YOUR AGENT CAN NOW REVERSE ENGINEER BINARIES ON ITS OWN
GhidraMCP connects Ghidra to MCP clients
decompiles and analyzes binaries
renames methods and data automatically
lists methods, classes, imports and exports
works with Claude Desktop, Cline and 5ire
https://t.co/8TDbmWHzwc
Claude Code v2.1.238 shipped MCP changes you can use right NOW.
Here's what to do:
1. Update to v2.1.238 or later
2. Run 'claude mcp list': disabled servers now show as '⊘ Disabled' instead of getting a health check
3. Run 'claude mcp get <name>': same behavior, no wasted check on disabled servers
4. Using 'headersHelper' in a project '.mcp.json'? Accept that folder's trust dialog first, also required under 'claude -p'
5. Project/plugin/agent-file 'headersHelper' now runs without inherited credential env vars, so pass what it needs explicitly
6. stdio servers no longer get 'server/discover' before 'initialize', so lazy servers stop starting their backend on every session open
Source: Claude Code CHANGELOG.md
Bookmark this, you'll need these tips
this is f**king insane
someone built an MCP that lets your agent draw hand-drawn Excalidraw diagrams live in the chat. it streams the sketch as it draws, and you can open it fullscreen and edit it yourself
here is how to set it up in 3 mins:
1. open Claude (or any MCP Apps-compatible client) > add a custom connector
2. paste https://t.co/5b7SlIoNpH
3. ask your agent "draw the architecture of a URL shortener"
done
save this and give it to your agent
https://t.co/frISAaSayk
Your MCP tool failed. Your agent never found out why
every failure takes one of two paths, and the spec treats them very differently. most servers pick the wrong one for validation errors.
path 1, protocol error: a JSON-RPC error like -32602 "Unknown tool" or a malformed request. the spec says clients MAY pass these to the model, and calls them errors models are "less likely to be able to fix".
path 2, tool execution error: a normal result with isError: true. the spec says clients SHOULD pass these to the model so it can self-correct and retry.
so the same mistake plays out two ways:
- the agent sends a date in the wrong format. server throws a protocol error. the model may never see it, and the run stalls
- same mistake, returned as isError: true with "Invalid departure date: must be in the future. Current date is 08/08/2025." (the spec's own example). the model fixes it and retries once
the fix: everything the model can correct (bad format, out-of-range value, business rule) goes in the result with isError: true. keep protocol errors for broken requests and unknown tools.
two traps most people miss:
- the message is vague. "Invalid input" gives the model nothing to correct. say what was wrong, what is allowed, and the current value
- you only test the happy path. call every tool once with a bad argument and read exactly what comes back
pin the spec version you test against too. this behavior is from the draft spec's Tools page.
source: MCP spec, Tools > Error Handling
check out the full spec below ↓ ↓
https://t.co/cWpYckf7LR
Memory MCP servers have been blowing up lately.
If your agent forgets everything between sessions and you don't know where to start, you can just copy this checklist.
1. basic-memory
Writes what the agent learns as plain Markdown notes on your disk (write_note, read_note, search_notes), so you can open and edit its memory in any editor. https://t.co/QZye34YqCs
2. mcp-memory-service
Stores memories with tags and lets the agent look them up with memory_search, including tag filtering. Ships a dashboard to browse what it saved. https://t.co/h8soDkQ9Re
3. mcp-neo4j-memory
Part of mcp-neo4j: saves entities and relationships in a Neo4j graph. Use it when "who depends on what" matters more than raw text. https://t.co/MOIDlepxWM
4. graphiti
Builds a temporal knowledge graph from episodes, with semantic and hybrid search. Its MCP server fits facts that change over time. https://t.co/WzvNyWFdOL
5. cognee
Turns documents and conversations into a graph plus vector memory. MCP service runs with docker compose --profile mcp up. https://t.co/cmS2SRRtQd
Copy these complete memory MCP blueprints, then read each README for the setup ↓ ↓
YOUR AGENT CAN NOW BUILD 3D SCENES IN BLENDER ON ITS OWN
MCP for Blender (blender-mcp) connects Blender to MCP clients
creates, modifies and deletes 3D objects, and applies materials
writes and runs Blender Python directly
checks its own work with multi-angle, wireframe and X-ray views plus renders
pulls assets from Poly Haven, Sketchfab and Poly Pizza
works with Claude Desktop, Claude Code, Codex, Cursor and VS Code
https://t.co/ngpFAShczt
Claude Code's recent releases quietly fixed a pile of MCP OAuth and reconnect bugs. If a remote MCP server kept failing on you, it's worth updating.
What changed, by version:
1. v2.1.225: macOS OAuth servers no longer fail with a burst of 401s as if you were never authenticated
2. v2.1.229: OAuth redirect URI now uses '127.0.0.1' instead of 'localhost', fixing strict authorization servers
3. v2.1.231: pre-registered OAuth clients no longer hit a redirect URI mismatch at sign-in
4. v2.1.234: MCP diagnostics no longer print resolved secrets in scope-conflict warnings
5. v2.1.239: remote MCP servers no longer stay failed after a transient 5xx on a mid-session reconnect
6. v2.1.239: MCP elicitation forms taller than the terminal are no longer clipped in fullscreen mode
Source: Claude Code CHANGELOG.md
Bookmark this, you'll need these tips
this is f**king insane
someone built an MCP that lets your agent design in Figma by writing code. one tool runs JS against the Figma API, so batch edits and whole layouts happen in one go
here is how to set it up in 3 mins:
1. claude mcp add figma-pilot -- npx @youware-labs/figma-pilot-mcp
2. download the plugin zip from the repo's Releases, then in Figma: Plugins > Development > Import plugin from manifest, and run it
3. ask your agent "check the Figma connection status"
done
save this and give it to your agent
https://t.co/o1fX0oZZOt
Your MCP server was approved once. It doesn't have to stay the server you approved
every connection hands your client two things: a tool list, and a promise that the list can change. servers that declare "listChanged": true may send notifications/tools/list_changed at any time, and the client simply re-fetches tools/list. most setups only review the list on day one.
what the spec actually says:
- tool annotations must be treated as untrusted unless they come from a trusted server
- clients SHOULD show tool inputs to the user before calling, and keep logs of tool usage
- a human SHOULD be able to deny invocations
so a tool approved as "get_weather" can come back next week with a rewritten description. the model reads descriptions as instructions. you never look at them again.
the fix is a check that runs on every change, not once:
1. snapshot name + description + inputSchema, and hash it
2. on every list_changed (and on every restart), re-fetch and diff against the hash
3. changed? treat it as a new, unapproved tool until a human re-confirms
two traps most people miss:
- you only diff descriptions. poisoned instructions can sit anywhere in the tool definition, including parameter descriptions
- you trust annotations like readOnly because they look official. the spec says they're untrusted by default
pin the server version too (e.g. [email protected], never @latest), so an update is a decision you made, not something that happened to you.
sources: MCP spec, Tools > Security Considerations
check out the full spec below ↓ ↓
https://t.co/6my5M3PMHP
MCP servers for coding agents have been blowing up lately.
If you've got Claude Code or Cursor but don't know which servers are worth installing first, you can just copy this checklist.
1. Context7
Pulls current, version-specific library docs into the prompt so the agent stops guessing outdated APIs. Add "use context7" to a prompt. https://t.co/ItVBxXW500
2. exa-mcp-server
Gives the agent web_search_exa to find pages and web_fetch_exa to read them as clean markdown. Good for "research this, then write the code". https://t.co/J671akytjn
3. firecrawl-mcp-server
Scrapes, crawls and maps sites; structured data comes from firecrawl_scrape with a JSON schema. Use it when a page needs more than a plain fetch. https://t.co/3eCjQ0fMhd
4. playwright-mcp
Drives a real browser through accessibility snapshots instead of screenshots, so the agent can click, fill forms and check its own UI changes. https://t.co/Elo1ySZ6kg
5. github-mcp-server
Lets the agent read issues, open and merge PRs, check Actions job logs and list Dependabot alerts without leaving the chat. https://t.co/nS3MYFoagI
6. sentry-mcp
Searches Sentry issues and events so the agent can pull a stack trace and go straight to the failing code. https://t.co/0GZIwM92UY
7. mcp-server-neon
Creates Postgres branches, runs migrations and lists slow queries. Meant for local development: test the schema change on a branch first. https://t.co/XxCItzOFl8
Copy these complete MCP blueprints, then read each README for the setup ↓ ↓
YOUR AGENT CAN NOW BUILD UNITY GAMES ON ITS OWN
unity-mcp-server connects Unity Editor to MCP clients
creates scenes, GameObjects, components and prefabs
edits materials, animation, terrain, navigation and UI
reads console and compile errors, runs EditMode and PlayMode tests
profiles memory and takes screenshots to verify the result
works with any MCP client that can launch a stdio server
https://t.co/u2DhUYWhx9
Claude Code quietly shipped MCP changes in the last few releases you can start using right NOW.
Here's how to use them:
1. Update to v2.1.238+, then run 'claude mcp list'. Disabled servers now show '⊘ Disabled' instead of being health-checked
2. Server failing? 'claude mcp list' or '/mcp' now shows the HTTP status and error text (v2.1.219+)
3. Running 'claude -p' with '--mcp-config'? Servers now connect before the first turn (v2.1.221+)
4. Skipped config entries are listed in 'mcp_server_errors' in the stream-json init event (v2.1.219+)
5. Check '/usage': MCP servers are now only charged for requests that used their tool results (v2.1.222+)
6. Using 'headersHelper' in a project '.mcp.json'? Accept the folder trust dialog first, even under 'claude -p'. It also runs without inherited credential env vars (v2.1.238+)
Source: Claude Code CHANGELOG.md
Bookmark this, you'll need these tips
Your MCP server may be a valid-token vending machine for other services. Most setups never check who the token was issued to
an MCP server that talks to a downstream API usually receives a bearer token from the client. the lazy version just forwards it. that pattern has a name in the spec: token passthrough, and it is explicitly forbidden
the rule is one line: MCP servers MUST NOT accept any tokens that were not explicitly issued for the MCP server. the check is the audience claim. a token minted for service A should be rejected by your server, even if the signature is perfectly valid
why forwarding hurts:
- rate limits and request validation that key off the token's audience get bypassed
- the downstream logs show a different identity than the one that actually called, so the audit trail breaks
- a stolen token turns your server into a proxy for exfiltration
two traps most people miss:
1. a token passing signature checks is not the same as a token meant for you. validate the audience, every time
2. the "request everything" scope habit. when the first challenge carries no scope, clients fall back to all of scopes_supported. the spec's mitigation is a small starting set (its example: mcp:tools-basic) and step-up via targeted WWW-Authenticate scope challenges when a privileged call is first attempted. avoid wildcard scopes like * or full-access
what to do: if your server calls another API, it should act as its own OAuth client with its own token for that API, not relay the one it was handed. publish only the scopes you actually need in scopes_supported
source: https://t.co/2z05qJjwMa
save this before you ship your next MCP server ↓ ↓
this is f**king insane
someone built a single command that installs an MCP server into every coding agent you use. claude code, codex, cursor, vscode, opencode. no more hand-editing 5 different config files
here is how to set it up in 3 mins
1. run: npx add-mcp https://t.co/Sq5WSlS39j
2. pick the agents you want (or add -y to skip prompts, -g for global)
3. restart your agent if it asks
done
bonus: npx add-mcp find <keyword> searches the registry, and list / remove / sync keep every agent in sync
https://t.co/x3tbGoX7oZ
save this and give it to your agent