Skip to content
NR
All writing
Developer ToolsAugust 17, 2026·7 min read read

I Ran My Own MCP Server Like a Customer Would

OmniContext claimed a live context://current resource. A stranger install could not even parse the file. Here is the reproduction, the three-line fix, and the protocol handshake that now answers.

I put OmniContext on my resume as a working MCP server. Then I installed it the way a stranger would.

npm pack. Global install. Run the binary.

It died before it listened.

Two independent fatal bugs

bin/mcp.js could not parse. Three tool-response strings used backslash-escaped template literals outside any template literal:

content: [{ type: "text", text: \`Task added: \${label}\` }],

node --check failed with SyntaxError: Invalid or unexpected token. The file has never started.

The markdown fence inside the context://current resource does need escaped backticks. Those two lines were correct. The three tool strings were not. Pattern recognition without execution is how this survives a code review and still ships broken.

Second bug: the same file requires @modelcontextprotocol/sdk three times. It was never declared in package.json. A clean install would have thrown MODULE_NOT_FOUND even after the syntax fix.

The proof that matters

After a three-line unescape and adding the SDK as a real dependency, I packed it again and spoke the protocol over stdio.

| Request | Response | |---|---| | initialize | omni-context-mcp 0.1.0, capabilities: resources, tools | | tools/list | get_tasks, add_task, complete_task | | resources/list | context://current |

Every claim on the resume was true. The code just could not run. The fix is live at neerajbhargav/omni-context@c13d3dd.

Why I am writing this down

Forward-deployed work is not "I built an MCP server." It is "I installed it the way the customer will, watched it fail, and left a reproduction plus a passing handshake." That is the same instinct as killing a model upgrade because the eval said no.

If you clone OmniContext today, the server starts. If you ask it for context://current, it answers. That is the only version of the claim I am willing to keep.