Diagram of Claude connected to three built MCP servers, an Obsidian vault server, a Trello server and a Dynamics 365 CRM server, and to two deployed ones, BigQuery's official MCP server and Trello's official connector.

MCP servers I’ve built and deployed

MCP (Model Context Protocol) is how an AI assistant like Claude gets hands, meaning tools it can call in other systems. I’ve built three of these servers and rolled out two that other people built. The rule I design around is simple. When an AI agent acts on your behalf, its mistakes should be small, visible and reversible.

A note on how I build. Claude Code writes the code. I design the tools, the guardrails and the tests, then I test, ship and own the result.

Built

Obsidian vault server

github.com/cyber-sami/obsidian-guarded-mcp

Lets Claude read, search and edit notes across several Obsidian vaults, working directly on the Markdown files with no Obsidian plugin needed. It has 12 tools for listing and switching vaults by name, reading, searching, writing and patching notes, frontmatter and vault stats. The guardrails are the interesting part. Every path is resolved and checked against the active vault, so .. and symlink escapes are blocked. Only Markdown files are touched, and the .obsidian, .git and .trash folders are off limits. Deleting moves a note to the trash and asks for the path twice, a patch has to match exactly once or it fails, and every reply names the vault it acted on. It’s about 400 lines with 56 tests. I use it most days as the connector behind my own notes, and it has been public on GitHub under the MIT license since September 2026.

Trello server

github.com/cyber-sami/trello-guardrails-mcp

Lets Claude organise Trello boards by name instead of IDs, with 14 tools for boards, lists, cards and labels. One resolver handles every name. An exact match wins, a partial match only counts when it’s unique, and otherwise the server refuses and returns the candidates instead of guessing. Every reply says what was matched. Writes are archive-only, there’s no HTTP DELETE anywhere, and a test fails if someone adds one. Credentials come from the environment or a locked-down file and travel in headers, never in URLs, and the README covers prompt injection through card text. It started life as a shell script, grew into a Python wrapper and ended up as a proper server. It now runs alongside Trello’s official connector, and it’s public on GitHub under the MIT license.

Dynamics 365 CRM server

The server behind AI access to CRM data. Read and write access to CRM records through the official web API, with the org-specific field mapping built in and every model call routed through an EU region. The hosted rollout was done together with an AI engineer colleague. Live on production data with the first users.

Deployed

BigQuery’s official MCP server

The warehouse vendor’s server, stood up as a self-serve workspace with EU routing, web tools switched off, consent filtering and setup guides in two languages. The full story is on self-serve data from the warehouse.

Trello’s official connector

Got it approved for organisation-wide use in August 2026. It runs side by side with my own Trello server.

Also in daily use

Off-the-shelf connectors for Microsoft 365 and Teams, Outlook calendar, Jira, Slack, Google Analytics, and WordPress through the AI Engine plugin. My meeting-to-ticket workflow runs on the first four, and this page went into WordPress through the last one.

Similar Posts