1. Conduid
  2. AI
  3. doppelganger
MCP server · AI

doppelganger

CLI utility to clone and shadow MCP server interfaces

39Low

Scored yesterday · breakdown

About doppelganger

doppelganger is an MCP server published by git+rinormaloku in the AI category: cLI utility to clone and shadow MCP server interfaces.

The repository has 4 stars and 0 forks, with the last commit 17 days ago. Recent commit activity is the strongest signal that reported issues will get attention.

Install

Install
npx mcp-doppelganger
Claude Code
claude mcp add doppelganger -- npx -y mcp-doppelganger
npx
npx -y mcp-doppelganger

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Ask AI

✦

Ask AI about doppelganger

Powered by Claude · Grounded in docs

I know everything about doppelganger. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

  • ✓README presentThe repository ships documentation.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

4 checks have not been run yet.

README

MCP Doppelganger

NPM Version NPM Downloads

Every MCP server has a doppelganger!

A doppelganger is a mock MCP server created from a simple config file. Use it to test AI agents, migrate away from a deprecated service, or simulate any MCP server locally. You can clone an existing server, modify the config to customize responses, and serve it.

Quick Start

Start a mock MCP server using the doppelganger.yaml config included in this repo:

npx -y mcp-doppelganger serve -f https://raw.githubusercontent.com/rinormaloku/mcp-doppelganger/main/doppelganger.yaml

That's it. Test it immediately with MCP Inspector:

# List all tools
npx -y @modelcontextprotocol/inspector \
  --cli "http://localhost:3000/mcp" --transport http --method tools/list

# Call a tool
npx -y @modelcontextprotocol/inspector \
  --cli "http://localhost:3000/mcp" --transport http --method tools/call  --tool-name "hello_user" --tool-arg "username=user-42"

The server responds with whatever you defined in the config. No real backend required.

Clone an Existing MCP Server

Want to create a fake version of a real server? Use the clone command. It connects to the real server, reads all its tools, resources, and prompts, and writes a doppelganger.yaml for you.

# Clone a server running via stdio
npx -y mcp-doppelganger clone "npx -y @modelcontextprotocol/server-everything"

# Clone a server running over HTTP
npx -y mcp-doppelganger clone "http://localhost:3000/mcp" --transport http

# Clone with authentication
npx -y mcp-doppelganger clone "http://localhost:3000/mcp" --transport http \
  -H "Authorization: Bearer $TOKEN"

# Set a default response message for every tool, resource, and prompt
npx -y mcp-doppelganger clone "npx -y @modelcontextprotocol/server-everything" \
  --response "This service has been decommissioned. Please contact support."

Edit the generated file to customize responses, then serve it:

npx -y mcp-doppelganger serve -f doppelganger.yaml

Configuration Reference

Full example

See examples/complete.yaml for a complete config file you can use as a starting point.

version: "2025-11-25"
server:
  name: "my-fake-server"
  description: "Description shown to the AI agent"
  version: "1.0.0"

tools:
  - name: "send_notification"
    description: "Sends a notification (DEPRECATED)"
    inputSchema:
      type: "object"
      properties:
        userId:
          type: "string"
        message:
          type: "string"
    response:
      isError: true
      content:
        - type: "text"
          text: "Notifications tool moved to the new Messaging MCP. CANNOT notify {{args.userId}}: '{{args.message}}'"

resources:
  - uri: "config://app"
    name: "Application Config"
    mimeType: "application/json"
    response:
      text: '{"status": "deprecated", "migration": "Use environment variables instead"}'
      mimeType: "application/json"

prompts:
  - name: "generate_report"
    description: "Generate a report (DEPRECATED)"
    arguments:
      - name: "reportType"
      - name: "dateRange"
    response:
      messages:
        - role: "assistant"
          content:
            type: "text"
            text: "Reports moved to https://analytics.example.com."

Transport options

# stdio (default) — for use with AI agents and MCP clients
npx -y mcp-doppelganger serve --stdio -f doppelganger.yaml

# HTTP — for browser or REST-based access
npx -y mcp-doppelganger serve --http -p 3000 -f doppelganger.yaml

# Both at the same time
npx -y mcp-doppelganger serve --stdio --http -f doppelganger.yaml

Example use case: Deprecating an MCP Server with a Proxy

A use case that inspired this package was to deprecate an existing MCP server and to inform AI agents using it about the deprecation and direct them to the new server or alternative solutions.

With this package all you need to do is clone the old server, customize deprecation messages per tool, and serve the doppelganger behind an MCP proxy. Clients keep hitting the same endpoint — the AI agents get clear instructions on where to migrate.

See the full walkthrough (including validation commands) in docs/deprecating-with-proxy.md.

Docker

docker build -t mcp-doppelganger .

# Mount a local config file
docker run -v $(pwd):/config mcp-doppelganger serve -f /config/doppelganger.yaml

# Pull config from a URL
docker run mcp-doppelganger serve -f https://example.com/doppelganger.yaml

CLI Command Reference

mcp-doppelganger clone

Connects to a live MCP server and "studies" its schema to generate a configuration file.

Option Shorthand Description Default
--transport -t Transport type: stdio or http stdio
--output -o Output file path doppelganger.yaml
--format -f Output format: yaml or json yaml
--header -H HTTP headers (repeatable for multiple) []
--response -r Default response text for all captured entities None

mcp-doppelganger serve

Starts the doppelganger server to host your mock interface.

Option Shorthand Description Default
--file -f Path or URL to your configuration file doppelganger.yaml
--stdio Enable stdio transport (for local agent use) false
--http Enable HTTP transport (for browser/remote use) false
--port -p Port used when HTTP transport is enabled 3000

Development

# Install dependencies
bun install

# Run locally
bun run dev

# Type check
bun run typecheck

# Build
bun run build

License

MIT

README copy captured when this server was indexed; it may lag the repository. The original is authoritative.

Questions

About doppelganger

How do I install doppelganger?

Run npx mcp-doppelganger, then add the server to your MCP client's configuration.

Is doppelganger safe to use with an AI agent?

Its trust score is 39 out of 100 (low). It passes 1 of the 2 static security checks run so far; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is doppelganger still maintained?

Yes — the last commit was 17 days ago. The repository has 4 stars and 0 forks.