# MCP (Model Context Protocol) server developer — since 2024

> The work I do with MCP: writing servers that open tools and context to a model, giving each project its own endpoint and treating every server as a trust boundary.

- Highlights: 2 years
- Experience: Since 2024
- Updated: 2026-11-08
- Source: https://muhammetsafak.com/expertise/mcp/
- Language: en-US
- Author: Muhammet Şafak

---
## Me in the MCP ecosystem

For giving a project's documentation to a model, the first three MCP servers looked reasonable; then the servers started living apart. I wrote on [the blog](https://muhammetsafak.com/blog/one-mcp-server-per-project-stops-scaling/) that the right unit is one endpoint per project, not one server, and what each of the four decisions behind it costs.

I see MCP as the protocol for giving a model context; the protocol is not the hard part, the decisions behind it are. When a server is connected, a trust boundary opens, and where that boundary stops is settled while the server is being written. The [AI systems](https://muhammetsafak.com/expertise/ai-systems/) page lays this frame out more widely; this page is the protocol itself and the server side.

I write the servers in [TypeScript](https://muhammetsafak.com/expertise/typescript/); the retrieval side of the context I serve is on the [RAG page](https://muhammetsafak.com/expertise/rag/).

## What is the MCP Server Developer role?

MCP (Model Context Protocol) is a protocol that opens tools and context to a model: it lets AI applications connect to external data sources and tools in a standard way. Developing an MCP server means designing which tool and which document are opened behind that protocol, and with what authority.

## What does the MCP Server Developer do?

I write MCP servers in TypeScript. In servers that open a project's documentation to a model I give each project its own endpoint, search both a vector and a full-text index, and say so when there is no good match. I treat every connected server as a trust boundary.

## Technologies I pair it with

- Model Context Protocol: A protocol that opens tools and context to a model; I treat every connected server as a trust boundary.
- TypeScript: The language I write Model Context Protocol servers in.
- Retrieval-Augmented Generation: The retrieval architecture that builds the model's answer from context fetched out of documents.
- Docker: Development environment and deployment unit.

## Frequently asked

### How long have you worked with MCP?

Since 2024, for 2 years.

### What is MCP?

Model Context Protocol is an open protocol that connects AI applications to external data sources and tools. It lets you describe, on the server side, which tools and which context are opened to a model.

### What does an MCP server developer do?

An MCP server developer opens the tools a model can call and the context it can read as a server. For me the job is not only speaking the protocol: it is deciding with what authority each tool is opened, how search is done and what the server does not do.

### Which language do you write MCP servers in?

TypeScript. I explain why I chose it, and how far a type goes in MCP, on the TypeScript page.

### What is the difference between MCP and RAG?

RAG is the architecture that builds a model's answer from context fetched out of documents; MCP is the protocol that opens that context and tools to a model. They can work together: retrieval can sit behind an MCP server. I cover the retrieval pipeline on the RAG page.

### What does your MCP server do when it finds nothing?

Instead of returning its least bad hit, it says there is no good match and points to the tool that lists the documents. The same discipline runs through indexing: a scanned PDF with no text layer is refused rather than indexed, because the failure nobody notices is the one that produces a document: the empty string gets indexed, and the project now holds a document that is listed and matches nothing.

### How do you keep projects apart in MCP?

I make isolation an address, not a setting: each project has its own URL, and a client connected to one project never sees another. The alternative was passing the project as an argument, which would leave confidentiality to the model picking the right argument. The cost is plain: there is no cross-project search.

### Does your MCP server have a known limit?

Yes: cross-lingual search. A question asked in Turkish whose answer lives on an English page mostly goes unanswered. Hybrid search recovered identifiers but not one natural-language question; a multilingual reranking model raised cross-lingual recall but took a search from milliseconds to seconds. Both were measured; the real fix, a second translation-trained encoder, was not paid for on this server, and the finding sits in the documentation rather than on a roadmap.
