Skip to main content
Glama
mgreenspan17

mcp-home-server

by mgreenspan17

mcp-home-server

Single, stable Model Context Protocol (MCP) "door" server that runs on your home machine and exposes a dynamic set of tools to every connected AI client (desktop, phone, future agents). Tools can be added, edited, or removed at runtime — no restart needed.

Behind the door:

  • Dynamic tool loader watches src/tools/ and hot-reloads each module via chokidar + the MCP SDK's list_changed notification.

  • JSON manifest is regenerated automatically and served at GET /manifest.

  • URLTracker ingests "AI usage" events, hashes them, and emits a url_tracker:new_ai event the first time a URL is seen.

  • Onboarding agent listens to those events and writes per-AI onboarding payloads (manifests/onboarding/<hash>.json) so new clients can instantly configure themselves to use this MCP host.

  • Scouting worker periodically scans configured roots (SCOUT_ROOTS) for scripts/modules that look like MCP tool candidates; proposals are written to manifests/pending/ for human review (no auto-promotion).

  • Dedupe worker compares registered tools and writes overlap reports to docs/dedupe/ to surface merges/refactors.

Quick start

git clone https://github.com/manniegreenspan/mcp-home-server.git
cd mcp-home-server
npm install
npm run dev
# Server binds 127.0.0.1 on the first free port in 7000-7999.
# Check console for the actual URL, e.g.: http://127.0.0.1:7432/mcp

Test it with the MCP Inspector:

npx @modelcontextprotocol/inspector@latest
# Paste the MCP endpoint URL into the inspector.

Related MCP server: Black Orchid

Endpoints

Path

Method

Purpose

/mcp

POST/GET

MCP Streamable HTTP endpoint (JSON-RPC)

/manifest

GET

JSON manifest of currently registered tools

/url-track

POST

URLTracker ingestion: { "url": "...", "source": "..." }

/health

GET

Liveness + last chokidar refresh

Adding a tool

Drop a file in src/tools/:

// src/tools/hello-world.ts
import { z } from "zod";
import type { ToolModule } from "../lib/types";

export default {
  name: "hello_world",
  description: "Says hello to a name",
  inputSchema: { name: z.string().describe("Name to greet") },
  handler: async ({ name }) => ({
    content: [{ type: "text", text: `Hello, ${name}!` }]
  })
} satisfies ToolModule;

The loader picks it up immediately, registers it with the MCP server, and sends the notifications/tools/list_changed notification. Connected clients (Inspector, Claude Desktop, etc.) refresh their tool list automatically.

Delete the file → tool unregistered. Edit the file → tool re-registered.

Cloudflare deployment

See docs/DEPLOYMENT.md. v1 recommends Cloudflare Tunnel fronting the local Express server. A pure-Cloudflare-Worker rewrite is in the ROADMAP (Workers can't do dynamic import() of src/tools/*.ts).

Project layout

mcp-home-server/
├── src/
│   ├── server.ts               # main entry: Express + McpServer + transports
│   ├── ports.ts                # port scan 7000-7999
│   ├── manifest.ts             # generate/serve JSON manifest
│   ├── logger.ts               # pino instance
│   ├── event-bus.ts            # shared EventEmitter
│   ├── tools/                  # dynamic tool modules (one file per tool)
│   ├── workers/                # onboarding-agent, scouting-worker, dedupe-worker
│   ├── url-tracker/            # ingestion + detector + hash store
│   └── lib/                    # types, hashing
├── manifests/
│   ├── current.json            # auto-regenerated manifest
│   ├── pending/                # scout proposals (manual review)
│   └── onboarding/             # onboarding payloads written by agent
├── docs/
│   ├── DEPLOYMENT.md
│   ├── ARCHITECTURE.md
│   └── dedupe/                 # dedupe-worker reports
├── tests/
└── logs/

License

MIT — see LICENSE.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mgreenspan17/mcp-home-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server