Using MCP Servers: Plug Tools Into Your Assistant
Finding, installing, and configuring servers safely, with picks you can check for yourself.
MCP servers turn an AI assistant from a chatbot into something that can work with your real tools: files, calendars, music, the lights at home. You add a server with a few lines of configuration that tell your AI app how to start it or where to reach it. The app then connects, asks the server what it offers, and hands those tools to the model.
The assistant never talks to a server directly. Every call passes through the host, the AI app you are using. The MCP specification asks hosts to keep a person in the loop, with the power to refuse a tool call, but how well that is done is up to each app. Claude Desktop asks before each tool runs; other apps let you approve a tool once and never be asked again. This article shows how to find servers, add them to three popular apps, keep their secrets safe, and pick servers for the personal assistant this series builds. MCP Security: The Attack Surface You Just Installed covers what consent prompts do not protect you from.
Where do you find MCP servers?
Start with the official MCP Registry, run by the MCP project and still marked as a preview as of October 2026. It is a public catalogue of server descriptions, not a store: it records each server's name, where its package or web address lives and how to launch it. Directories and marketplaces build on it, and you can query it yourself; opening https://registry.modelcontextprotocol.io/v0.1/servers?search=calendar in a browser returns the matching entries as JSON.
The most useful thing the registry gives you is a verified publisher. Every name starts with a namespace that the registry's documentation ties to a GitHub account or a domain the publisher proved they own. Search for GitHub and you will find io.github.github/github-mcp-server, which is GitHub's own, next to servers with similar names published by individuals. The part before the slash tells you who you are trusting. What the registry does not do is review code: it leaves security scanning to npm, PyPI and Docker Hub, and to the directories built on top of it.
The MCP project also keeps a small set of reference servers that show how the protocol works: Everything (a test server), Fetch, Filesystem, Git, Memory, Sequential Thinking and Time. Older examples such as the Brave Search, GitHub and PostgreSQL servers have been archived, because the companies behind those products now publish their own. For a service you already use, check first whether its maker runs an MCP server; GitHub, Brave, Stripe and Home Assistant all do.
Community directories such as Glama and Smithery are good for browsing by category, and some add ratings or usage counts. Treat them as a starting point and check the publisher yourself. One habit saves a lot of grief: package names and settings change, so copy a server's configuration from its own README, not from a blog post, this one included.
How do you add a server to your app?
MCP servers are separate programs. You do not install them inside your assistant. You tell the host either how to start a server on your computer (a command and its arguments, for the stdio transport) or where to reach one on the internet (a URL, for Streamable HTTP). The host does the rest.
Claude Desktop
The official guide to local servers walks through this. In Claude Desktop, open Settings, choose Developer, and click Edit Config. That opens claude_desktop_config.json, which lives at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS and %APPDATA%\Claude\claude_desktop_config.json on Windows. Each entry under mcpServers names a server and says how to launch it. Here is the official filesystem server with access to two folders:
npx downloads the package and runs it, -y skips its "install this?" question, and the folders after the package name are the only places the server will touch. On Windows the folders look like "C:\\Users\\alice\\Documents", with each backslash doubled because this is JSON. Save the file, quit Claude Desktop completely and start it again; the app reads this file only at startup. The server's tools then appear in the connectors menu of the chat box. If they do not, the logs explain why: mcp.log and one mcp-server-<name>.log per server, in ~/Library/Logs/Claude on macOS or %APPDATA%\Claude\logs on Windows.
Remote servers do not go in this file. You add them under Settings, Connectors, then Add and "Add custom connector", paste the server's URL and sign in, as the guide to remote servers shows. The same page lets you switch individual tools off. Claude Desktop also installs Desktop Extensions, single .mcpb files that bundle a whole server: double-click one and choose Install, which is the easiest path if you do not want to edit JSON.
Claude Code
Claude Code adds servers from the terminal, as its MCP documentation shows. Put the launch command after --, and any secrets before it with --env:
The first two start local servers; the third connects to a remote one, Home Assistant's built-in server, which we come back to below. claude mcp list shows whether each server connected, and /mcp inside a session shows the same and lets you sign in or reconnect. MCP Servers: Give Claude Code New Powers covers the rest, including project files you can share with a team.
VS Code
VS Code reads .vscode/mcp.json in your project, or a user-level file for every project, as its MCP documentation explains. The shape differs from Claude Desktop's in two ways that trip people up: the top-level key is servers, not mcpServers, and a remote server says "type": "http".
The second entry is GitHub's own remote server, which signs you in with your GitHub account. VS Code may ask you to trust a server before it starts it, and in Copilot Chat only Agent mode calls tools. Cursor uses the same command and args under an mcpServers key, in .cursor/mcp.json.
Whichever app you use, the sequence after you save is the same:
How do secrets and permissions work?
Many servers need a key or token, and the usual place for it is an env block in the config. Here is Brave's own web search server, which needs a Brave Search API key:
Be clear about what this does. The key sits in the config file in plain text, so keep that file private and out of anything you share or commit. When the host starts the server, it passes these values to the server's process as environment variables. They never travel inside MCP messages and never enter the model's context; the model sees only the tool's name, description and inputs, and the results the server returns. VS Code can avoid the plain text entirely: an input variable, declared in the file's inputs list and used as "${input:brave-api-key}", makes VS Code ask you for the value instead of storing it in the file.
Next, remember what a local server is: a program running with your user account's permissions. The filesystem server limits itself to the folders you list, and that check lives in the server's own code, not in the operating system. A badly written or malicious server can read anything you can. For extra isolation, run servers in a container; the filesystem server's README shows a Docker setup that mounts only chosen folders, read-only if you add ro.
Then decide what may run without asking. The spec's tools page says there should always be a human in the loop who can deny a tool call, and that apps should show which tools the model can use and ask for confirmation. Hosts implement this differently. Claude Desktop asks before each action by default, VS Code may ask you to confirm each tool call, and most apps let you approve a tool for good. Keep the prompts on for anything that writes, sends, buys or deletes.
Remote servers bring their own sign in, usually OAuth, where you approve what the app may do on the service's own page. The token you get is issued for that one server. Read the permissions on that page before you click approve, because an assistant with write access to your calendar can also delete from it.
Which servers should the personal assistant use?
Our assistant needs four kinds of tool: files, calendar, music and smart home. Here is what exists for each as of October 2026, and how sure you can be of it.
Files. Use the official filesystem server, @modelcontextprotocol/server-filesystem, configured as above. It offers tools such as read_text_file, write_file, edit_file, list_directory, search_files and move_file, and it marks each tool as read-only or not so hosts can treat writes with more care. Any path outside the folders you listed is refused, and folders inside them are allowed.
Smart home. Home Assistant has a built-in Model Context Protocol Server integration, added in version 2025.2, so you need no extra package. You enable it in Home Assistant, and it serves MCP at /api/mcp on your Home Assistant address, with sign in through OAuth. The assistant can only see and control the devices you expose to Home Assistant's voice assistant, which makes that list your permission setting. One catch: Claude Desktop reaches custom connectors from Anthropic's cloud, so your Home Assistant must be reachable from the internet, for example through Home Assistant Cloud. Claude Code runs on your machine and can use the local address, http://homeassistant.local:8123/api/mcp.
Calendar. Google now runs an official Calendar MCP server, a remote server at https://calendarmcp.googleapis.com/mcp/v1 with tools to list, create, update and delete events and to suggest meeting times. As of October 2026 it is a Developer Preview, open only to members of Google's Workspace Developer Preview Program, and it needs an OAuth client you create in Google Cloud. If you are not in the program, the registry lists several community calendar servers. Choose one with the checklist below.
Music. As of October 2026 the registry lists more than a dozen Spotify servers, and none is published by Spotify. A community server is the only option, so apply the checklist with extra care to anything that asks for your Spotify login, and keep confirmation on for playback tools.
Here is the checklist, for those two and for any server without a big name behind it:
- Who publishes it? Read the namespace in the registry and the owner of the source repository.
- Is it maintained? Look for recent releases and answered issues.
- Can you read the source? Skim what it sends over the network and what it runs.
- What does it ask for? Prefer read-only scopes and narrow tokens, and give it a key made just for it.
- Where does it run? A local server runs as you; a remote one holds your token on someone else's machine.
Quick Reference
| Item | Detail |
|---|---|
| Where to look first | Official MCP Registry (preview, verified namespaces, no code review) |
| Claude Desktop config (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json, key mcpServers |
| Claude Desktop config (Windows) | %APPDATA%\Claude\claude_desktop_config.json, key mcpServers |
| Claude Desktop remote servers | Settings, Connectors, Add custom connector |
| Claude Code | claude mcp add <name> -- <command>; claude mcp add --transport http <name> <url>; /mcp |
| VS Code | .vscode/mcp.json, key servers; "type": "stdio" or "type": "http" |
| Cursor | .cursor/mcp.json, key mcpServers |
| Secrets | env block, stored in plain text; VS Code input variables avoid that |
| Files | @modelcontextprotocol/server-filesystem (official) |
| Smart home | Home Assistant's built-in MCP Server integration, /api/mcp |
| Calendar | Google's Calendar MCP server (Developer Preview, October 2026) or a vetted community server |
| Music | community servers only (none from Spotify, October 2026) |
Frequently Asked Questions
Q: Can I use MCP servers with a local LLM running on Ollama or llama.cpp?
Yes, if the app around the model is an MCP host and the model handles tool calls well. LM Studio, for example, has worked as an MCP host since version 0.3.17, with the same mcpServers format. The protocol does not care which model is behind the host. Small local models do pick tools less reliably, and servers with long tool lists can crowd a small context window.
Q: How do I know a community MCP server is safe to run? You cannot know for sure, so reduce what it can do. Use the checklist above, read the source, give it the narrowest key and folders you can, run it in a container when you are unsure, and keep confirmation prompts on. Stars and recent commits tell you a project is popular and alive, not that it is safe.
Q: What happens if a server crashes during a tool call? For a local server, the host sees the process exit. That call fails and the host shows an error; the spec says the client should restart the server, and because the protocol is stateless the call can simply be tried again against the new process. In Claude Desktop the server's log file usually says why it died.
Q: Can I share one MCP server between multiple assistants on the same machine? Not a stdio server: each host starts its own copy of the program, which serves only that host. That is often what you want, since each copy can have different folders or keys. A server that runs over Streamable HTTP can serve many clients at once.
Q: Do I need to restart my assistant after adding a new server to the config?
For Claude Desktop, yes: quit it completely and start it again, because it reads its config at startup. In Claude Code, claude mcp add saves the server and a new session connects to it; claude mcp list and /mcp show whether it worked, and /mcp can reconnect a server that failed.
Test yourself
You add this entry to Claude Desktop's config, save it and restart the app: "filesystem": {"command": "npx", "args": ["/Users/alice/Documents"]}. The filesystem tools never appear, and mcp-server-filesystem.log shows an npm error saying it could not read a package.json inside /Users/alice/Documents. What is wrong, and once it is fixed, will the assistant be able to read /Users/alice/Documents/Projects/summary.txt?
Answer: The arguments list only the folder, so npx has no package to run. It treats the folder itself as a package, finds no package.json there and gives up, and the server never starts. The arguments must name the package first: ["-y", "@modelcontextprotocol/server-filesystem", "/Users/alice/Documents"]. The -y answers npx's install question, the package name says what to run, and every path after it is a folder the server may use. Save, then quit Claude Desktop completely and start it again, since it reads the config only at startup. Once the server runs, the Projects file is reachable: the server allows everything inside a listed folder, including subfolders, and refuses paths outside it. When a server does not appear, the log is the first place to look, and running the same command in a terminal usually shows the error directly.
Next: Build Your First MCP Server. It walks through writing a small calendar server in TypeScript with the official SDK, testing it with the MCP Inspector and plugging it into Claude Desktop.
If you want this kind of breakdown every week, how to safely wire real tools into AI assistants instead of just playing with demos, subscribe to Internals Decoded at internalsdecoded.com.
Sources
- Official MCP Registry
- The MCP Registry: about
- MCP example servers
- Connect to local MCP servers
- Connect to remote MCP servers
- MCP specification 2026-07-28: Tools
- Claude Code: Connect Claude Code to tools via MCP
- VS Code: MCP servers
- Desktop Extensions: One-click MCP server installation for Claude Desktop
- Filesystem MCP Server
- Brave Search MCP Server
- Home Assistant: Model Context Protocol Server
- Google Calendar MCP server
- LM Studio: MCP
- Glama MCP servers
- Smithery