No description
  • JavaScript 80.3%
  • TypeScript 19.7%
Find a file
2026-05-17 23:51:43 +02:00
examples add and update the setup 2026-05-17 23:51:43 +02:00
servers add and update the setup 2026-05-17 23:51:43 +02:00
skills updating 2026-05-17 11:13:53 +02:00
.gitignore Add obsidian-mcp-server as submodule 2026-05-06 21:52:04 +02:00
.gitmodules add and update the setup 2026-05-17 23:51:43 +02:00
README.md Add obsidian-mcp-server as submodule 2026-05-06 21:52:04 +02:00

MCP Servers + Skills (Direct-Use)

Centrally maintained MCP server installations and a shared skills library. Clients (Cursor, OpenCode, Gemini-CLI) consume these directly via stdio — no proxy hub.

Layout

~/ai/mcp/
├── servers/    -- built MCP server installations
│   ├── filesystem/                 (npm: @modelcontextprotocol/server-filesystem)
│   ├── obsidian-context-server/    (project context, ADRs, FSDs, tasks)
│   ├── obsidian-notes-server/      (note CRUD, plans)
│   ├── obsidian-portfolio-server/  (portfolio generation)
│   ├── obsidian-mcp-server/        (REST API based, cyanheads)
│   └── skills-server/              (exposes skills/ as MCP tools/prompts)
├── skills/     -- SKILL.md library
│   ├── shared/                     (used by every profile)
│   ├── coding/                     (coding profiles only)
│   ├── private/                    (private profile only)
│   └── work/                       (work profiles only)
└── examples/   -- copy-paste configs per (client × profile)
    ├── README.md
    ├── cursor-private.json
    ├── cursor-coding-home.json
    ├── opencode-private.json
    ├── opencode-coding-home.json
    ├── gemini-private.json
    └── gemini-coding-home.json

How to use

  1. Need MCP support in a vault or repo? Pick the right examples/<client>-<profile>.json.
  2. Copy it to the location your client expects:
    • Cursor → <repo>/.cursor/mcp.json
    • OpenCode → <repo>/opencode.json
    • Gemini-CLI → <repo>/.gemini/settings.json
  3. Restart the client. Done.

See examples/README.md for the full mapping table.

Profiles

  • private — homevault context (personal vault, recipes, journaling, portfolio).
  • coding-home — personal code projects with vault read-access for project notes.

(Pharma is intentionally not represented here — it has its own self-contained .cursor/ setup in ~/pharma/pharma/.cursor/ and is not migrated.)

Why direct-use, no proxy hub?

Earlier this repo ran mcp-proxy-hub as a systemd service per profile. Removed because:

  • Upstream had a Node-incompat bug (unix_dgram socket type) in notifySystemd that crashed whenever WatchdogSec triggered.
  • A trailing comma in one profile JSON caused 5610 silent restart-loops with no observability.
  • Single point of failure: one bug in the hub took down all profiles.

Direct stdio per client means more duplication across config files, but no daemon to manage, no proxy bug surface, and JSON errors surface immediately with a useful error in the client. The trade-off favors robustness over DRY.

Adding a new MCP server

  1. Install/build it under servers/<server-name>/.
  2. Add it to whichever examples/*.json files should expose it.
  3. Add it as a --available-server flag to those examples' skills entries so capability-aware skill filtering works.
  4. Validate the JSON: python3 -c "import json; json.load(open('examples/<file>.json'))"

Adding a new skill

  1. Create skills/<profile-dir>/<skill-name>/SKILL.md.
  2. Set tools_required in the frontmatter to list the MCP servers the skill needs.
  3. The skill becomes available in any profile whose example has both the matching --skills-dir and the required --available-server flags.