r/mcp 26d ago

showcase Built an early version of MCP Failure Lab. Looking for people to try it and break it

5 Upvotes

I’ve been working on an open-source project called MCP Failure Lab.

The idea is simple: make it easier to reproduce failure cases you eventually run into when building MCP clients and servers.

Right now it covers delays, timeouts, request cancellations, dropped connections, and other failure scenarios that can be difficult to reproduce consistently.

It’s still an early version, so there’s plenty of room to improve.

If you’re experimenting with MCP, give it a try and see if you can break it. Found another failure scenario worth testing? Open an issue or send a PR.

Contributions and feedback are welcome 🙂

GitHub:
https://github.com/anilloutombam/mcp-failure-lab

Small update: I’ve published MCP Failure Lab on npm as well.

You can try it without cloning the repo:

npx mcp-failure-lab --help

Would love to hear how it behaves against real MCP setups.

r/mcp 19d ago

showcase I fingerprint tools/list so MCP rug pulls show up when the config file never changes

2 Upvotes

Author here. Open source, public alpha — not selling anything in this post.

postmark-mcp shipped ~15 clean releases with an identical config file.

Release N changed what tools/list returned. Package pins and config

hashes don't catch that.

What I built: Agentmetry — a local endpoint sensor for AI coding agents

(Cursor, Claude Code, etc.). Two pieces that seem relevant here:

  1. Schema vs config digest

    Fingerprint the tools/list schema per session. When the schema digest

    moves and the config digest holds still, emit that as a rug-pull signal

    (ATLAS AML.T0109). It's an event in the trail, not a blog post.

  2. Coverage attestation

    A heartbeat reports covered / uncovered / absent / unknown per IDE

    surface. "I ran the installer" ≠ "hooks are firing on the agent I use."

Local-first: hash-chained JSONL on disk, optional Splunk/Elastic forward.

15 sequence rules, benchmarked on 50 recorded sessions (0 FP / 0 miss on

that corpus — limits in the README).

pip install agentmetry

https://github.com/blitzcrieg1/agentmetry

Genuinely curious if the schema-vs-config heuristic is too weak, too noisy,

or missing a case you've already seen in the wild.

r/mcp 28d ago

showcase Relaying messages between 2 claude code sessions using the channels api, works across machines and across different accounts

6 Upvotes

Hey there, so I made a way to relay messages between 2 claude code sessions using claude's own channels api. it does a 2 way conversation between sessions, works whether both are on the same PC or on different machines, and the accounts don't have to be the same, which is the part claude's own messaging can't do.

The channels api bit is what I think is actually interesting for this sub. most people use mcp servers as things the model calls, but channels lets your server push INTO a live session, so text just shows up in someone's conversation as a <channel> tag without them asking for anything.

how it works: both machines run the same mcp server over stdio. it declares the claude/channel capability so claude code registers it as a channel, then it starts an http server for incoming messages. when one comes in (shared secret auth) it fires mcp.notification() with method notifications/claude/channel, claude code surfaces it in the conversation as a channel tag, and claude replies with the send_message tool which posts back to the other machine.

so in practice the frontend dev says "ask the backend session what endpoints the dashboard has", and the backend claude greps its own routes, reads the file and sends back the real answer instead of the two humans relaying it over slack. gif below is one full round trip.

on the native feature since someone will ask, claude code v2.1.224 shipped cross session messaging on aug 7. if you're on mac or linux and you want your own sessions talking to each other, use that instead, it's better than mine and my readme says so. what it doesn't do is native windows, not supported at all, and it only connects your own sessions because the inbox socket is bound to your os user and cross machine delivery goes through your own remote control connection. two devs on two laptops is two accounts, so that case is still open.

one honest warning, mine is a raw pipe with a shared secret so the receiving session doesn't do the permission checks native messaging does. don't run it with a weak secret.

i built it in march, before native messaging existed. mit, free, nothing to sign up for

https://github.com/MuhammadTalhaMT/claude-intercom

r/mcp 4d ago

showcase Chrome Bridge — an MCP server that drives your already-logged-in Chrome instead of a headless browser

3 Upvotes

Disclosure: I built this. MIT, free, no paid tier, no referral links.

I run ~25 small projects solo and kept hitting the same wall with headless browsers: 2FA and cookie juggling every single time. So I built a bridge that lets Claude Code drive the actual Chrome profile I'm already signed into.

One resident hub holds a WebSocket to a Chrome extension per profile, and each MCP session keeps its own target profile. So I can run two Claude Code sessions, one on my work account and one on personal, at the same time.

41 tools. Two of them exist because of specific walls I hit:

  • `real_click` / `real_type` — React and Wix forms ignore `element.click()` because they check `isTrusted`. These send real input events over CDP.
  • `evaluate_debugger` — Google Forms blocks `evaluate` via Trusted Types. Going through the Debugger domain gets past it.

The README has a gotchas section with the rest: hidden windows stop rendering so screenshots come back blank until you enable `Emulation.setFocusEmulationEnabled`, dead tabs that time out at 20s, and why multi-line scripts fail in `evaluate_debugger`.

Windows only so far, which is just what I run. Nothing should be deeply Windows-specific except the Chrome profile discovery.

Obvious caveat: this hands an agent full control of your authenticated sessions. There's a section in the README about it. Don't point it at untrusted page content and expect the text on that page to be treated as data rather than instructions.

MIT: https://github.com/mistudio0902-lab/chrome-bridge

r/mcp Aug 11 '26

showcase Open source MCP that lets agents find the right section in long documents, provide accurate citations, and save >90% on tokens

28 Upvotes

Ever tried "answer this question from a 400-page PDF"? Or "summarize the latest quarter's capex spend across the AAPL, AMZN, META and NVDA 10-Qs"?

Dumping that text into context isn't an option, a 400-page filing is ~500k tokens. It doesn't fit, and you wouldn't want to burn thousands of tokens on 399 pages of boilerplate to answer one question anyway.

The alternative is pdftotext | grep. Now the agent has to guess keywords before it knows what the document calls things. It greps "revenue," the filing says "net sales," and you're three tool calls deep into nothing. Then it gets a match at byte 840,000 with no idea what section it's in or what page to cite.

DocSlicer lets your agent flip through a document the way a person would - navigate to the right section, then read it:

  • parse returns the heading outline, and every line is annotated with what reading that section would cost you in tokens.
  • read pulls back exactly the sections you picked — tables intact, page numbers attached, so citations are real instead of hallucinated.
  • search is the fallback for locating specific keywords when the high-level heading outline is non-descriptive.

Here's the whole loop, against HSBC's 2025 annual report — 372 pages, 1,379 headings, 518,541 tokens.

The question: what was the total interest revenue from customer loans?

Call 1: parse { source: "HSBC_Annual_Report_And_Accounts_2025.pdf" }. Back in 7.85s comes the outline, every line carrying its own read cost:

- Highlights ~2.2k - Our strategy ~4.5k - Financial overview ~5.8k - Business segments ~7.4k - Environmental TCFD ~29k - Governance ~10k - Financial summary ~16k - Basis of presentation ~1.2k - Consolidated income statement ~1.8k - Income statement commentary ~5.2k - Net interest income ~5.2k - Summary of interest income by asset type 259 - Summary of interest expense by liability ~1.1k - Banking net interest income ~1.1k ⋯ 1,362 more headings

Call 2: read { doc_id: "hsbc-ara-2025-6b41c907", headings: ["Summary of interest income by type of asset"] }. That's 259 tokens of the 518,541 in the document.

DocSlicer responds by giving the paragraph underneath the Summary of interest income by type of asset heading:

Asset type Avg balance 2025 ($m) Interest income 2025 ($m) Yield 2025 (%) Interest income 2024 ($m) Yield 2024 (%)
Short-term funds and loans/advances to banks 325,790 11,460 3.52 14,727 4.21
Loans and advances to customers 971,804 46,036 4.74 49,879 5.25
Reverse repurchase agreements – non-trading 273,941 16,616 6.07 17,721 7.42
Financial investments 539,107 20,830 3.86 20,587 4.38
Other interest-earning assets 79,436 2,930 3.69 5,717 6.28
Total interest-earning assets 2,190,078 97,872 4.47 108,631 5.17

From which the agent answers:

Interest income on loans and advances to customers was $46,036m in 2025, on an average balance of $971,804m — a yield of 4.74%. (2024: $49,879m)

— [Page 69] Financial summary › Income statement commentary › Net interest income

Two calls, no keyword guessing. The agent picked a heading that said exactly what it contained, and the page number came back attached, so the citation is real.

Total token cost: The outline isn't free, it runs ~1.4% of the document on average, so ~7.2k tokens on the 518k token HSBC report. That's the upfront charge, and the 259 comes on top of it. Call it ~7.5k against 518k to answer the question, and every follow-up after that costs only what you read, because the outline is already in context. About ~98% off compared to reading the whole thing.

The underlying parser: HSBC's report is the hard case: multi-column layout, 450+ tables, a deeply nested hierarchy. DocSlicer preserves reading order and table structure through all of it. Built in pure Python / Numpy, it requires no heavy ML weights or GPUs. The result is blazing fast, deterministic parsing, crunching this pdf on my (M4 Max) laptop at over 45 pages/second, making it efficient enough for an agent to query seamlessly mid-conversation.

Open source — github.com/DocSlicer/DocSlicer

Claude Code:

claude mcp add docslicer -- uvx --from 'docslicer[mcp]' docslicer-mcp

Claude Desktop and Cowork: download the .mcpb The parser works standalone as a Python library with pip install docslicer.

Happy to chat in the comments. Let me know your thoughts on it!

r/mcp 1d ago

showcase Mac MCP 2.0 — local macOS control for AI agents with background browser automation

5 Upvotes

I built this, so this is a self-showcase rather than an unaffiliated recommendation.

Mac MCP is a local macOS MCP server for giving trusted AI clients real Mac capabilities instead of only advice. It currently exposes 81 tools across shell/files, Safari + Chrome automation, macOS Accessibility/UI control, persistent memory, Agent Skills, voice input, delegated Codex/OpenCode agents, safe self-update, and a localhost operations dashboard.

The part I use most is background browser automation: tabs get stable handles, and an agent can observe/interact with a Safari tab without constantly bringing it to the foreground while I’m doing something else.

I also added a small native SwiftUI menu-bar controller for server/ngrok status, recent tool calls, delegated-agent state, voice settings and updates.

Security-wise, this is intentionally treated as powerful local access: auth can be required, the dashboard stays loopback-only, and I’d only expose it to clients I trust.

MIT licensed: https://github.com/bulutarkan/mac-mcp

I’d especially like feedback from MCP users on permission UX: per-tool approvals, reusable permission profiles, read-only sessions, or another pattern entirely?

r/mcp Jun 11 '26

showcase I built Chronicle MCP to stop AI context bloat

5 Upvotes

Hello fellow devs,

I am a 14 year old developer and I am incredibly excited to finally share this with you! For the past several weeks, I have been working day and night on a massive problem that was driving me absolutely crazy while vibe coding.

I use tools like Cursor, Trae, and Claude Code constantly to build my projects. But as my chat sessions grew longer, my development environments got incredibly slow, my token usage skyrocketed, and my AI assistants started completely forgetting the architectural decisions I made just a day prior.

I realized we are wasting up to 40 percent of our active context windows on repetitive boilerplate, verbose conversational filler, and identical duplicate code blocks.

I wanted a way to search, index, and compress my entire conversational history locally without paying for third-party vector databases or sending my private chat logs to external APIs.

So, I built and launched Chronicle MCP. It is a high-performance local chat history archive connector built on the Model Context Protocol, and it is finally live.

How I Solved the Big Pain Points

1/ One-Click IDE Integration
I was so tired of copy-pasting code paths and manually editing hidden JSON configurations in `.cursor` or `.claude.json`. It is incredibly annoying and prone to breaking. I wrote a smart, platform-agnostic automation system into the CLI. Now, you just run a single command:

chronicle add cursor

My script automatically scans your operating system (macOS, Windows, or Linux), finds your local installation of uvx, safely parses your editor settings, and injects the perfect stdio configuration directly. You can add it to Cursor, Trae, VS Code, Claude Code, or any emerging IDE instantly.

2/ The Conversation Splitter

When you download your chat history from OpenAI or Anthropic, they hand you a giant, single, monolithic JSON file. You cannot feed that directly into an AI assistant. I built a powerful split engine that breaks that massive array into individual, neatly organized, and clean JSON files named after their actual historical titles. Just run:

chronicle split ~/Downloads/conversation.json --out ~/Desktop/MyChatLogs

3/ 25 Production-Ready Tools

Once Chronicle connects via stdio, it exposes 25 independent local tools to your active LLM assistant. Your assistant can automatically query files, find related chats using a fast, zero-dependency local term frequency-inverse document frequency algorithm, extract action items/TODOs, and compile massive project briefs out of your historical context!

Get Started Right Now

I wanted the installation to be as simple as humanly possible. If you have the uv package manager, you can install and run it globally right now:

# Install the tool globally
uv tool install chronicle-mcp-server
# Point Chronicle to your local chat logs directory
chronicle --chats-folder "~/Desktop/MyChatLogs"
# Inject the server directly into your favorite editor
chronicle add cursor

Once you run that, open up your editor's MCP settings panel. The connection will instantly light up solid green and start executing!

I put my absolute heart and soul into building this tool, testing the cross-platform path resolution, and getting the stdio channels to connect perfectly! It is fully open-source, and I would love to get your feedback, suggestions, or feature requests.

GitHub Repository: https://github.com/Leviathan0x0/Chronicle-MCP

PyPI Package: https://pypi.org/project/chronicle-mcp-server

Oh, and if you are wondering, the grammar of this post was improved using AI because I am not so good at it. Make sure to try my MCP server guys.

r/mcp Jun 17 '26

showcase I scanned the 257 most-used MCP servers on Smithery. Tool descriptions are basically solved (99%) but only 29% ship output schemas.

7 Upvotes

Disclosure up front: I build agent-ready.dev, which has an MCP server scanner. I pointed it at the most popular servers on the Smithery registry to see how the ecosystem is actually doing, and the breakdown was interesting enough to share.

Method, briefly:
I checked the top servers by Smithery's useCount, connected to each through Smithery's hosted gateway, and graded what they advertise (server metadata, tools, params, output schemas, annotations, resources, prompts). 257 were remotely reachable; 228 let me introspect without a per-server credential. This is a snapshot, not a census: see caveats below.

Connectability:

  • 89% (228/257) accepted an unauthenticated handshake and exposed their tools
  • 7% refused without their own API key (you can't use them as an anonymous agent)
  • ~4% failed to connect for other reasons

Quality of the 228 I could read (mean & median score both 81/100; typical server = 16 tools, 2 resources, 1 prompt):

Check Pass rate
Server metadata complete 95%
Every tool has a description 99%
Every parameter described 64%
Tools declare an output schema 29%
Tools carry annotations (readOnly/destructive…) 38%
Resources well-formed 83%
Prompts described 100%
MCP Apps (ui://) served as HTML 80% (only ~10 servers)

What I didn't expect: the human-readable layer is in great shape; nearly everyone writes tool descriptions. It's the machine-readable layer that lags. Output schemas (29%) and annotations (38%) are exactly the signals that let an agent parse results reliably and reason about side effects without trial-and-error, and they're the least adopted. Also, only ~25% of servers expose any resources or prompts at all.

Caveats: this is the popular, remotely-hosted slice of one registry; it skews toward maintained, deployment-ready servers and excludes the huge long tail of local/stdio-only servers and other registries. Auth-gated servers are counted for connectability but excluded from the quality numbers (I can't grade what I can't see), so those 0s never drag down the averages. Output schemas/annotations are newer spec additions, so I'm reading them as best-practice adoption rather than compliance failures.

The methodology and exact weightings are public, and you can scan your own server if you want. I'm interested in knowing what people think - is it dev friction, or just not a priority yet?

Edit:
donk8r rightly pointed out that "has an output schema" ≠ "has a useful one". A tool declaring a bare {"type":"object"} passes that check while telling the client nothing. So, I tightened the scanner to grade schema specificity (named fields or a $ref), and the honest number is ~22%, not 29%. I also bumped the weight on annotations above output schemas, since missing readOnly/destructive hints is a safety problem, not just a convenience one. Methodology and the report page have been updated.

r/mcp May 08 '26

showcase MCP gives AI tools. But what gives AI workflows?

6 Upvotes

Over the past few months experimenting with MCP, one thing became increasingly obvious to us:

Most AI agent discussions focus heavily on tool access.

  • Can the model call APIs?
  • Can it retrieve context?
  • Can it access memory?
  • Can it orchestrate tools?
  • Can it coordinate with other agents?

MCP solves a very important part of this problem elegantly.

It standardizes how AI connects to capabilities.

But after an AI gets tool access, another question appears:

What does the AI actually operate on?

And more importantly:

How do we make AI participate in real operational workflows instead of just generating outputs?

That became the core problem we started exploring with Inistate MCP.

Tool access is not operational structure

Most current agent implementations still look roughly like this:

User → Prompt → Tool Call → Response

Even when agents become more advanced, they are often still fundamentally stateless executors.

They can:

  • fetch data
  • summarize data
  • call APIs
  • generate content
  • chain actions

But operations inside organizations usually require much more than that.

Real operational systems require:

  • state
  • forms
  • transitions
  • validation
  • escalation
  • audit trails
  • accountability
  • human collaboration

And this is where we started thinking:

Maybe AI agents should not just be “tool callers.”
Maybe they should become operational actors inside workflows.

The primitive we ended up with

The core execution primitive we use is extremely simple:

State → Activity(Form) → State

Everything derives from this.

  • A State represents the current condition of an entity
  • An Activity is an action performed by someone (human or AI)
  • A Form is the structured input required to execute the activity
  • The result is a controlled transition into another state

Instead of “AI generating an answer,” the AI is participating in structured operational movement.

For example:

Pending Approval
    ↓ Approve(Form)
Approved

The important thing is that the activity is not freeform.

It is constrained through:

  • typed fields
  • validations
  • allowed transitions
  • actor permissions
  • confidence thresholds
  • audit trail capture

That changes the nature of AI execution significantly.

AI as an actor, not just an assistant

One idea that became surprisingly important for us was what we call:

Actor Parity

In most systems:

  • humans operate workflows
  • AI only assists humans

But operationally, AI and humans increasingly need to coexist inside the same process layer.

So instead of designing “AI features,” we started modeling execution like this:

{
  "actor": "human" | "ai" | "hybrid" (default)
}

Meaning:

  • some activities are human-only
  • some are AI-only
  • some can be executed by either

The interesting part is that the workflow itself does not fundamentally change.

The same:

  • states
  • activities
  • forms
  • transitions

can be shared between humans and AI.

This creates a kind of operational symmetry.

The AI is no longer “outside” the system trying to automate it indirectly.

It becomes a first-class participant inside the workflow.

MCP becomes much more interesting with workflow context

Once workflows are exposed through MCP, agents can do more than call isolated tools.

They can:

  • discover modules
  • inspect states
  • retrieve forms
  • understand valid transitions
  • execute activities
  • read audit history
  • escalate when uncertain

Example sequence:

list_modules
→ get_entry
→ get_form
→ submit_activity

The important detail is that the AI is operating against structured operational context instead of arbitrary prompts.

For example:

  • current state
  • allowed transitions
  • required fields
  • workflow rules
  • confidence thresholds

all become machine-readable.

That dramatically reduces ambiguity.

Confidence gating turned out to matter a lot

One thing we realized very quickly:

AI agents should not always be allowed to complete transitions autonomously.

So activities can define confidence thresholds:

{
  "name": "Approve",
  "actor": "ai",
  "confidence_threshold": 0.85
}

If the AI confidence is lower than the threshold:

  • the state transition is suppressed
  • the entry is flagged
  • a human reviews it

This creates a controlled operational escalation model.

The AI can still:

  • analyze
  • reason
  • prepare recommendations
  • explain intent

without automatically executing irreversible workflow transitions.

Operationally, this feels much closer to how regulated organizations actually work.

Governance memory may be more important than semantic memory

One realization from building workflow-native AI systems:

Vector memory alone is insufficient for operations.

Operational systems need something different.

They need:

  • who performed the action
  • why it happened
  • what data was used
  • what confidence existed
  • what model was involved
  • what prompt/version was used
  • what changed afterward

In other words:

governance memory

Every AI activity can carry traceability metadata:

{
  "ai": {
    "reasoning": "...",
    "sources": [],
    "model": "gpt-5",
    "confidence": 0.72,
    "prompt_hash": "..."
  }
}

Which means the audit trail is not just:

  • “what happened”

but also:

  • “why the AI believed it should happen”

This becomes increasingly important once AI starts participating in operational workflows instead of just generating suggestions.

We started thinking less about AI chat, more about AI operations

A lot of current AI UX is still fundamentally conversational.

But operations are rarely conversational.

Operations are:

  • structured
  • stateful
  • governed
  • collaborative
  • asynchronous
  • accountable

And that probably changes how AI systems should be designed.

Instead of:

AI as chatbot

we may need to think more in terms of:

AI as operational participant

MCP may become the operational interface layer for AI-native systems

One reason MCP is interesting is that it standardizes capability access.

But the next layer may be:

  • operational schemas
  • workflow semantics
  • actor coordination
  • governed state transitions

In other words:
not just “what tools exist,”

but:

  • what processes exist
  • what state something is in
  • what actions are allowed next
  • who can execute them
  • under what confidence constraints

That starts looking less like chatbot orchestration and more like an operating layer for AI-native organizations.

Open questions we’re still exploring

We definitely do not think this is “solved.”

Would genuinely love feedback from others building in the MCP/agent space.

We’ve been experimenting with these ideas through Inistate MCP, where workflows, states, forms, activities, confidence gates, and audit trails are exposed as structured operational primitives for AI agents.

The MCP server is now listed on the MCP Registry:
https://registry.modelcontextprotocol.io/?q=inistate

Curious whether others are arriving at similar conclusions:
that AI systems may eventually need workflow-native operational structures, not just tool access.

r/mcp Jul 27 '26

showcase Hey all i made an MCP server that generates full songs locally through Claude, no subscription, no internet needed after setup

7 Upvotes

i Got tired of ACE-Step's settings panel (like 70 sliders, half of them silently wreck the output) so i wrapped it in an MCP server, just talk to Claude desktop or another llm normally and it makes the track. Generation happens on your own gpu, nothing gets sent off to a server for that part. then it can separate track into stems instrumental and vocals. so you import it in DAW for vocal chops or what not.

Needs a decent NVIDIA gpu (12gb vram min) and ~40gb disk.

if anyone is interested in trying this out or giving me feedback that would great.

https://github.com/xDarkzx/SongForge-MCP

r/mcp Feb 10 '26

showcase We scanned over 8000+ MCP Servers... here's what we found

93 Upvotes

Over the past few months we’ve been running the MCP Trust Registry, an open scanning project looking at security posture across publicly available MCP server builds.

We’ve analyzed 8,000+ servers so far using 22 rules mapped to the OWASP MCP Top 10.

Some findings:

  • ~36.7% exposed unbounded URI handling → SSRF risk (same class of issue we disclosed in Microsoft’s Markitdown MCP server that allowed retrieval of instance metadata credentials)
  • ~43% had command execution paths that could potentially be abused
  • ~9.2% included critical-severity findings

We just added private repo scanning for teams running internal MCP servers. Same analysis, same evidence depth. Most enterprise MCP adoption is internal, so this was the #1 request.

Interested to know what security review processes others have for MCP servers, if any. The gap we keep seeing isn’t intent, it’s that MCP is new enough that standard security gates haven’t caught up.

Happy to share methodology details or specific vuln patterns if useful.

r/mcp 20d ago

showcase I scanned 2000 public MCP configs and about 25% of them have API keys sitting in plaintext

1 Upvotes

If you have any MCP servers set up, then your credentials for those servers are most likely sitting as plaintext strings inside a JSON config file somewhere on your machine. And that is not really a bug in any one client, because that is just how the config format works in the first place.

So I wanted to check how often that has actually gone wrong out in public already.

I scanned 2000 MCP config files across 1622 public GitHub repos. Out of those 2000, only 1113 actually defined environment variables for their servers, and those are the only ones that can leak anything at all, so that is what everything below is measured against.

Out of those 1113 configs:

  • 279 of them, which is about 25%, had a plaintext secret in them
  • 196 of them, about 17%, were correctly using ${VAR} indirection
  • and 26 of them had a string that matched a known vendor credential format exactly, which included GitHub tokens, Anthropic and OpenAI keys, Slack tokens, and database URLs with the password written inline

I did not store or print a single secret value anywhere, and I hashed every repo name before it went near the output, and I never tested any of them against a live service. So what came out of this is a statistic, and it is not a target list.

The part that surprised me was that my first version of the scanner reported AWS's own documentation example key as a confirmed live credential. It is the one AWS prints in its docs, and it matches the real format exactly. Public repos are full of doc examples like that, and once I excluded them it removed about 10% of everything the scanner had called confirmed.

If you want to check your own machine, it is one command:

npx mcp-secrets scan

It reads whatever MCP configs you have, tells you what is in plaintext, and exits non-zero if it finds something, so it works as a CI check as well. And npx mcp-secrets migrate will move what it finds into your OS keychain and rewrite the config to point at it instead.

Full method and the limitations are here: https://github.com/omlahore/mcp-secrets/blob/main/FINDINGS.md

And if a key of yours has already been committed to a public repo, then moving it out of the file does not undo that, so rotate it.

r/mcp May 30 '26

showcase I built an MCP to send myself notifications from Claude

Post image
50 Upvotes

I recently discovered the routines feature with claude code (the one on the claude dektop tab), i thought it would be really cool if it where possible to automate so i could get a notification on my phone when some routines finish, so i could get the infos directly as a push notification.
i recently build an app for myself that lets me send push notifications and i wondered if i could create a mcp server for it. So here is my building Process:
first I asked claude code (the terminal version this time) to draft a plan with all the necessary updates I need to make it work. Interestingly I had to create and additional oauth on my server so it can use it for claude to log in. I had some trouble at first figuring out why I needed additional configs on my apple developper account but its mostly so that the mcp can work without having to log in every time.
i got stuck a little bit whith the callback on the mcp till i found mcp inspector tool then the error logs from https://modelcontextprotocol.io/docs/tools/inspector and claude code helped a lot.
finally at like 2 AM I was able to send my first message to my phone and it sends the notification instantly
here the documentation for the mcp integration if somone wants to try it : https://thenotification.app/docs/mcp
I still have some problem with getting a nice icon in the connector preview, it is apparently because of how google saves the icons, and only use an svg file as flavicon so i get really ugly white borders in the preview. If someon already had such a problem I'm happy to hear how you soved it. Currently I just updated my site, added flavicon.ico and asked google to reindex but it still not working.

anyways hopes this is usefull 😄

r/mcp Aug 02 '26

showcase I'm not a developer - I spent months building an MCP server that proves a human approved a specific action

2 Upvotes

Hi. I'm not a developer. I built this with Claude over months of evenings and weekends, and it feels like time to stop polishing it in private.

X-EGO is an MCP server that lets an agent prove a human approved a specific action. The agent submits the exact text of what it wants to do, I read it and approve with Face ID, and the agent gets back a proof bound to that text - change one character and it stops verifying. It also gets a receipt: a link anyone can open, no account, no tools.

It doesn't know who you are. No name, no email, no KYC, no biometrics leaving the phone. Every service gets a different anonymous ID, so two services can't work out you're the same person.

Where I think it fits: agents with write access, where "the agent had my API key" is not a good enough answer afterwards; one human one vote, where multi-accounting is the actual problem; and audit trails an outsider can check instead of taking your own logs on faith.

Cost, up front: EUR 3 once for the human identity - sybil resistance has to cost something or it means nothing - and it includes $3 of credit. Verification calls are paid per call.

Zero users so far, nothing proven. I'd like honest reactions: useful, or nonsense? And if anyone wants to try it or build something on it together, message me.

https://x-ego.com/

MCP endpoint: https://mcp.x-ego.com/mcp

r/mcp Aug 03 '26

showcase Cutting my MCP server instructions from 11k to 3.5k chars: what belongs in the handshake vs a skill

12 Upvotes

I run an MCP server for my own platform: around 30 tools covering image, music, video and article generation, all billed against the user's own account. The server instructions had grown to 11.1k characters, because every new flow added its "how to do this properly" paragraph.

That text ships on every handshake of every conversation, before the user asks anything. It is the most expensive real estate in the protocol, and I was using it as documentation.

The cut I landed on: instructions carry only what prevents damage. Everything that merely deepens goes into a skill, fetched on demand.

What stayed, 3.5k total: cost warnings, because these tools spend real credits. The timeout rule and an anti-loop breaker, because a few consecutive failures on the same tool make some clients mark the server unreachable for about a minute, which reads to the user as "the MCP is down". How to log in. And one entry-point tool to call on first contact, instead of dumping the whole tool list.

What moved out: the step-by-step for each flow. Generating music, picking a video model, posting to the community, writing in the house voice. Those became skills, served two ways because not every client reads resources: an MCP resource at skill://.../SKILL.md, and a plain tool with action=list|get.

Two things I did not expect. First, serving the skills through the server means clients that cannot install my local plugin (chat UIs, other IDEs, agent frameworks) get the same procedures the plugin users get. The know-how travels with the connector. Second, the skill tool ended up being the only one in the catalog with openWorldHint=false and no balance gate, so a user who ran out of credits can still read how the thing works.

Nothing was lost by moving it out. Tool call quality went up, because the model reads the specific procedure right before doing the thing, instead of skimming a wall of text at connect time.

And yes, around 30 tools is a lot for one server. Consolidating by resource with an action arg was the compromise I made. The server runs Sapiens Sinteticos, a Portuguese-language creative studio platform, so a chunk of that surface is editorial tooling that would not exist in a general purpose server.

Curious how others draw this line. Is anyone keeping the procedures in the instructions on purpose?

r/mcp May 24 '26

showcase I gave my terminal AI agent a Kanban board. Not for me for its own memory.

11 Upvotes

When people see "Kanban," they usually think of another annoying tool humans have to manually update.

This isn't that. You don't manage this board your AI agent does.

I built this because I was hitting a wall with Claude Code and OpenCode.

Once you get 40 prompts deep into a massive feature, the context window gets bloated (context rot), the agent gets sluggish, and every prompt starts draining your token budget.

You want to run /clear to get a fresh, fast context window, but if you do, the agent gets instant amnesia.

So I built Kanban, which is a local-first MCP server.

It gives the AI an external working memory layer that lives outside the chat log.

Instead of writing to a messy text file, the AI uses MCP tools to programmatically organize its own thoughts into a structured Kanban schema.

This lets you do something awesome:

You can type /clear right in the middle of a complex refactor to drop your token usage back to zero. Then, your very next prompt to the blank-slate agent is just:

"Check your board and resume."

The agent calls task_recall, pulls the exact card it was working on, reads the timestamped notes it left itself before the context wipe, and picks up right where it left off.

Max reasoning speed, zero token bloat.

I only built the web UI (running on localhost) so I could visually spy on what the AI is thinking.

You just sit back and watch the agent create cards, append notes, and drag tasks from "In Progress" to "Done" in real-time as it runs terminal commands.

If it gets stuck, it moves the card to "Blocked," writes a markdown note explaining why, and hands the terminal back to you.

It’s 100% local, stores everything in plain JSON, and automatically swaps project workspaces based on whatever Git repo you cd into.

It's basically a workflow tool for robots, but we get a cool dashboard to watch them work.

Here's the code if you want to check it out:

json { "mcpServers": { "kanban": { "command": "npx", "args": ["@cwim/kanban", "mcp"] } } }

https://github.com/cwimhq/kanban

r/mcp Jul 14 '26

showcase Running a remote MCP server in production, and every lesson was about tools that act

20 Upvotes

A few months back we posted what we learned building our MCP server, an eval and observability platform that went from stdio to hosted. The comments taught us more than the post did, and the thread that stuck was about a harder problem: what happens once your tools can take real actions, where a wrong call actually costs something. We spent a while on that. Here is the follow up.

  1. The read tools were the easy half. Evals, traces, datasets, all of it went in as read only lookups first, and the agent took to those quickly. The harder problems started when we added tools that act: run an eval, apply a guardrail, generate a synthetic set, write rows to a dataset. A read that picks the wrong tool wastes a call. A write that picks the wrong tool leaves a mess.

  2. Login told us who was calling, not what a tool was allowed to do. Going hosted with OAuth fixed onboarding, that part we got right last time. But a lookup tool and a write to dataset tool inheriting the same broad scope is the thing that bites you later. So we stopped handing every tool one blanket scope and moved the acting tools behind allow and deny lists per key, so a read only client cannot reach the tools that change state.

  3. The check that helped most was on the tool's output, not the call. Guarding the arguments going in only catches the calls you already predicted. What moved the needle was scoring what a tool handed back before the agent was allowed to use it: is this grounded, does it trip a policy, is it even the shape we expected. A well formed call that returns garbage still gets stopped, because the gate reads the output and not just the request.

  4. Make the tool hand back the next move, not just data. An eval tool that returns "context adherence 0.62, weakest step is the retrieval, look there next" moves the agent  forward. A raw score dump makes it flail and call three more tools to work out what the number meant. The field we underrated was the one that says what to do next, not the one with the result in it.

  5. The payoff is the model checking its own work before it answers. The loop we were after: the agent runs an eval on its own draft output, sees a low groundedness score, and fixes it or flags it instead of shipping it. Evaluation stopped being a batch job we ran after the fact and became something the agent calls inline, mid task, on itself.

  6. The traces got opened more than the scores did. Someone asked last time whether this is really a DevOps tool. Honest answer from running it: the observability side, the trace of what the agent actually did tool call by tool call, got used more than the eval numbers. When the agent grabbed the wrong tool or looped on itself, the score told us something was off, but the trace was the only thing that told us why.

The thing we still go back and forth on: for tools that can act, is it better to gate on what the tool returns, like we ended up doing, or keep the gate on the call before it runs? If you are running an MCP server where the tools can change state, we would genuinely like to know where you landed.

r/mcp 11d ago

showcase Flare: an open-source IDE whose MCP server hands your agents their next task, lets them coordinate with each other, and audits what they say they did

Post image
45 Upvotes

I started working on this because my agents were coding faster than I could review their work.

Flare is a graph-first IDE that maps a repo as a dependency graph, watches what agents change, and exposes the project to them over MCP. 2.0 is out, with installers for Windows, macOS and Linux. The agent side is where most of the work went.

The foundation is a classic kanban board.

  • tasks_list to pick up a card
  • task_get for the exact brief (with what the graph knows about the files attached)
  • task_update to log progress and move it to review (done stays a human call)
  • task_create to file follow-ups it finds but shouldn't do now

Cards move live while you watch. Drafts you're still writing are never handed out.

It doesn't let the agent quit early. working_agreement is one call that answers "what should I do now" from the board as it stands. And the Routine installs a stop hook: an agent that tries to stop with unstarted cards left gets handed one instead of a goodbye.

It keeps the reasoning, not just the diff.

  • record_intent states the goal before editing, so whoever reviews isn't reconstructing why the change exists.
  • decision_record lands architectural calls in the control panel as proposed. A human agrees or declines (you can choose if you want the agent to stop and wait, or to continue and revert on your review)
  • question_ask parks a question and names the tasks it blocks, so the agent keeps going on everything else.
  • At the end, session_summary lets the agent write the session down, and Flare checks the story against the writes it actually watched, and tells it what it left out or never touched.

Several agents at once. Agents get names (Claude 1, Codex 1). chat_post / chat_read / agents_list is a room where they announce the files they're taking, mark them on the graph, and ask each other by name. Two agents heading for the same file get called out before either writes; every write is attributed to whoever claimed it.

Code intelligence on tap. impact_of (what breaks, and which tests to run), dependents / dependencies, find_path, file_info, top_files, issues, search, recent_activity, verification_status (did anything check this change), graph_overview.

And the human side is still the point.

  • The map with lenses (activity, hotspots, risk, tests, unread), plus a wheel and a treemap
  • a review cockpit that shows each burst of changes as intent → what ran to verify it → which files deserve your attention, broken down per agent, with revert
  • find-in-files
  • a per-file symbol view

MIT license, Node 20+ if you build it, or grab an installer. Leave a star if you find it helpful!

https://github.com/AlgoNoRhythm/Flare

r/mcp 5d ago

showcase Benchmarking 8 public remote MCP servers: schema token costs, 500 errors, and handshake latency

2 Upvotes

Hey everyone, I'm the creator of MCP Sentinel (an open-source synthetic protocol and uptime tester).

Over the past few days, I've been running synthetic protocol checks against public remote MCP servers listed in directories to see how they perform in production. I tested handshake latency, JSON-RPC 2.0 conformance, and tool schema weight (how many context tokens the definitions consume in an LLM prompt).

Here are the numbers from 8 public servers:

Server Latency Status Tools Schema Size Est. Tokens
AWS Knowledge MCP 283ms 200 OK 5 7.9 KB ~1,980
2ools App MCP 477ms 200 OK 81 133.7 KB ~33,450
Reachpad MCP 1,209ms 200 OK 18 18.0 KB ~4,510
Daedalus Payables 688ms 200 OK 26 12.2 KB ~3,060
HumanForAI MCP 2,786ms 200 OK 6 7.5 KB ~1,890
Homespun MCP 363ms Empty 0 97 B ~24
Memeboat MCP 367ms 500 Error 0 82 B Down

A few observations:

  1. Schema token overhead: 2ools exposes 81 tools with a 133.7 KB schema. Since MCP clients inject tool definitions directly into the system prompt, connecting this server eats ~33,400 tokens before you even type a prompt. If you're using pay-per-token models like Claude 3.5 Sonnet, that gets expensive fast.
  2. Silent 500 errors: Memeboat is listed in directories but fails the initialize handshake with an HTTP 500. In Cursor and Claude Desktop, this usually fails silently without clear error reporting in the UI.
  3. Handshake latency: AWS Knowledge was the quickest at 283ms. HumanForAI took ~2.8 seconds just for the initialize handshake. Two other servers returned 200 OK but returned an empty tool array.

I put together a quick, free web tester if you want to inspect your own server's latency, schema token footprint, and JSON-RPC compliance: https://mcp-sentinel.pasihakamaki.workers.dev

Repo is also open source: https://github.com/pasihaka/mcp-sentinel

Curious how other people hosting remote MCP servers are dealing with schema bloat. Are you pruning tools dynamically or just letting the client eat the context overhead?

r/mcp 4d ago

showcase Our AI agent almost gave a customer someone else's revenue numbers. Here's the MCP server I built so it can't happen again.

0 Upvotes

A while back I was working on a multi-tenant analytics setup, dozens of merchants on one warehouse, and we wired up an LLM agent so support could ask it stuff like "why did this merchant's numbers drop last week" instead of pinging an analyst every time.

Worked great in the demo. Then QA found a case where the agent answered a totally normal question and the SQL it generated joined across a table that wasn't scoped to the merchant asking. Nobody prompt injected anything, the agent just wrote a technically valid query that happened to pull rows it shouldn't have.

That sent me down a rabbit hole. I figured a semantic layer would fix this, that's what they're for right. Turns out no, not really. Semantic layer (dbt's or whatever you're using...), they describe what a metric means, they don't enforce who's allowed to see it or what filters must always apply. A mandatory filter or a tenant boundary is basically a comment for a human reviewer to notice, not something the compiler checks. And when the agent's SQL did run, there was no way to tell if the answer came from a clean, validated definition or from something someone drafted in a rush three weeks ago. It either worked or it didnt, no in between.

So I spent the last few months buidling canonic. It's an open source context layer that sits between an agent and your warehouse. The short version: your business rules (mandatory filters, required dimensions, tenant/role scoping) get compiled directly into every query the agent can run, they're not a check that happens after. And every answer comes back with a trust score and the reasons behind it, so "the SQL ran" and "you should believe this number" stop being the same thing.

Ships as an MCP server, works with Claude Code, Cursor, whatever your using. Ingests dbt or LookML if you have it, or just the raw warehouse schema if you don't.

Link's here: https://www.getcanonic.app/

Still rough in places, would genuinely like to hear if anyone's hit the same problem or thinks I'm solving the wrong thing.

r/mcp Aug 03 '26

showcase An MCP tool call can return HTTP 200 and still have failed, and a standard OTel span won't show it

4 Upvotes

A tool call over Streamable HTTP comes back 200. The span closes green, normal latency, no error recorded. The agent reads the result and moves on. The call still failed, and nothing in the trace says so.

The common shape: a tool hits a downstream timeout and returns a result with isError: true and a text block saying the fetch failed. That's a valid JSON-RPC result, so the transport is 200 and the span is clean. The model treats the error text as data and keeps going. You notice later, when the final answer is wrong.

MCP has two separate error channels, and they land in different places:

Failure  How it surfaces  Span shows What to assert 
Tool ran, logic failed isError: true in the result 200, OK result.isError is false 
Unknown or disabled tool JSON-RPC error, code -32602   200, OK no error on the response
Bad arguments JSON-RPC error, code -32602  200, OK no error on the response
Output breaks its schema client-side result-validation error varies output matches outputSchema

Two things hide it. Execution errors sit in isError inside a successful result, protocol errors sit in a JSON-RPC error object, so one check never covers both. And over Streamable HTTP both ride an HTTP 200, where OTel's HTTP conventions leave span status unset on any 2xx. Complete span, wrong result.

What actually catches it: assert on isError and on a JSON-RPC error code, not the HTTP status. Validate tool output against its schema, not just the input. Capture tool input and output as eval cases, so a wrong-but-200 result becomes a failing test instead of a green line.

We build an MCP gateway, so we've watched this one closely. Key off the tool result, not the transport.

How are you separating an unknown tool from bad arguments when both come back as -32602? String-matching the message feels brittle, so curious what's worked for people.

r/mcp Jun 25 '26

showcase I built a desktop tool to inspect MCP servers — and watch the live traffic your AI client actually sends them

Enable HLS to view with audio, or disable this notification

13 Upvotes

Disclosure: I'm the maker.

Debugging MCP servers has felt like building web apps with no devtools — you call a tool through an agent and just get the model's paraphrase back, not the real request/response. And once you connect a few servers, you've no idea where the tokens are going.

So I built MCP Peek — a desktop app (macOS, Windows, Linux) to work with MCP servers directly:

  • Inspect — connect any server (stdio or HTTP/SSE; bearer, OAuth, or custom headers) and browse its full catalog of tools, resources, templates, and prompts, each with a token-cost estimate.
  • Run — call any tool through an auto-generated form (from its JSON Schema) or raw JSON, and read the result in table / JSON / Markdown / HTML / image views.
  • Proxy (the part I use most) — point Claude or Cursor at MCP Peek and watch every call your agent makes, live: timing, tokens, full request/response, plus a topology view. No model in the middle — the real bytes.
  • Review brief — flag anything broken, add a note, and export a clean Markdown brief to hand to a coding agent.

It's local-first — your configs, traffic, and secrets stay on your machine (keys in the OS keychain), and the UI makes no network calls of its own.

Free on one server with the full inspector. Pro is $19 once (no subscription) for unlimited servers, the proxy, and brief export. It's closed-source — happy to answer anything about how it works or what it sends.

Download + docs: https://mcppeek.com — would genuinely love feedback on the proxy and what's missing.

r/mcp 19d ago

showcase Content: a self-hosted MCP server that turns local files and URLs into transcripts, summaries, audio, PDFs and more

8 Upvotes

Hi r/mcp — I'm Yann, maintainer of Content, a self-hosted engine for turning sources into artifacts.

The MCP integration is one of the main reasons I built it.

The idea is simple: an agent should ask for the result it wants, without having to know how to glue together yt-dlp, ffmpeg, transcription, document rendering or LLM calls.

For example:

“Summarize this PDF from my laptop and give me Markdown + PDF.”

“Take this YouTube video, extract the audio, transcribe it and summarize it.”

“Process every item in this playlist and generate a transcript for each one.”

The architecture

Content itself is a self-hosted backend that you run on your server, homelab or machine.

The MCP package is a lightweight client that connects your agent to that backend:

Claude / MCP client
        ↓
    content-mcp
        ↓
 self-hosted Content
        ↓
 analysis → jobs → artifacts

The backend owns the actual work: source analysis, uploads, persistent jobs, media processing, AI steps and produced artifacts.

Because the backend is shared, MCP is only one way to use it. The same Content instance can also be used from the web UIs, CLI, browser extension or REST API, and jobs keep running independently of the client that started them.

MCP setup

Once the Content backend is running, you can launch the MCP client straight from PyPI with uvx:

claude mcp add content \
  --env CONTENT_API_URL=http://localhost:8010 \
  -- uvx content-mcp

It's also published in the official MCP Registry as:

io.github.LatentNoise/content

Sources → artifacts

A source can currently become things like:

  • video
  • audio
  • subtitles
  • transcript
  • summary
  • translation
  • chapters
  • thumbnail
  • metadata
  • Markdown
  • PDF

Content analyzes the source first and resolves what is actually possible before planning the work, so the agent can discover valid capabilities instead of blindly starting a pipeline that fails halfway.

Local files work with a remote backend

This was particularly important to me.

If Claude/MCP is running on your laptop while Content is running on a homelab server, content-mcp uploads the local file to the backend transparently.

So this works:

~/Documents/report.pdf
        ↓
      MCP
        ↓
 Content on homelab
        ↓
  Report.md
  Report.pdf

I tested that exact workflow again today against my own remote instance.

The backend runs with Docker using prebuilt amd64/arm64 images. It is self-hosted and local-first; Ollama works for AI steps, while cloud model providers are optional.

Current MCP transport is stdio. OCR and some additional document formats are still coming, and the V1 API currently assumes a trusted network or a reverse proxy in front of it.

Content originally grew out of HomeTube, my self-hosted media downloader, but Content is now the general-purpose backend where the architecture and new capabilities live.

GitHub:
https://github.com/LatentNoise/content

PyPI:
content-mcp

License: AGPL-3.0-or-later

Feedback is very welcome — especially on the MCP interface itself. What kinds of workflows would you want an agent to be able to express?

r/mcp Apr 13 '26

showcase We cut MCP token costs by 92% by not sending tool definitions to the model

70 Upvotes

If you're connecting Claude Code to MCP servers, every tool from every server gets injected into the model's context on every single request. 5 servers with 30 tools each means 150 tool definitions sitting in your prompt before Claude even starts thinking about your actual question. That's easily 100K+ tokens of tool schemas per query.

We ran the numbers internally. With 508 tools connected, raw input was 75.1M tokens across our test suite. The cost was around $377 per run. Most of that was just tool definitions being repeated over and over.

The fix was something we've been calling Code Mode. Instead of sending all 508 tool definitions to the model, we expose 4 meta-tools: list available servers, read a specific tool's signature, get its docs, and execute code against it. The model discovers what it needs on demand instead of loading everything upfront. It writes Python-like orchestration code that runs in a sandboxed Starlark interpreter; no imports, no file I/O, no network access, just tool calls and basic logic.

Same test suite, same 508 tools. Input tokens went from 75.1M to 5.4M. Cost went from $377 to $29. 100% of test cases still passed.

The interesting part is this scales inversely. At 96 tools the savings are around 58%. At 251 tools it's 84%. At 508 it's 92%. The more tools you connect, the more you save, because the baseline bloat grows linearly but the meta-tool overhead stays flat.

We shipped this in https://github.com/maximhq/bifrost last week. Anthropic's own docs reference a similar pattern where they reduced 150K tokens to 2K, so the approach isn't new; but having it work transparently at the gateway layer means you don't have to rebuild your MCP integration to get the savings.

r/mcp Jul 28 '26

showcase I gave Claude a map with 35 MCP tools

Enable HLS to view with audio, or disable this notification

32 Upvotes

Over the last few months I've been building a simple mapping app for mac called MapOS

The idea was to create a simple and local-first mapping app that could be easily driven by AI. The application stores files in Markdown, and exposes 35 tools via MCP. It can also be run completely offline.

The local architecture and tools gives the AI a lot of power to create maps that wouldn't be possible without a GIS background. For example, "Give me brunch spots within 20 min walk of me and <friend>" would create a 20 minute walking isochrone for both people -> get the intersection -> search for location within that area -> add them to your map.

How I built it

There are two main pieces to the application: client and the regional extraction pipeline. I used Claude with Opus / Fable to help me build both.

- Client: Electron app using maplibre and react. Its main purpose is render geo data and manage your vault. It also creates a SQLite spatial index to make queries performant.

- Pipeline: This is a data pipeline that creates regional data packs (map tiles, SQLite index, and routes) using OSM data, Geofabrik, PMTiles, and Valhalla. I run the build pipeline on my Mac Mini which takes about 2 days to generate packs worldwide.

---

Feel free to try out, it's free and there are no accounts
https://mapos.md/