cd /news/developer-tools/your-first-mcp-server-in-a-language-… · home topics developer-tools article
[ARTICLE · art-96474] src=pipe-lang.com ↗ pub= topic=developer-tools verified=true sentiment=· neutral

🔌 Your First MCP Server — in a Language, Not an SDK

Pipe, a new programming language, claims to be the first with built-in Model Context Protocol (MCP) support, allowing developers to expose functions to clients like Claude Desktop and Cursor without an SDK or dependencies. The language's `ai_tool` function registers a tool, while `mcp_server` and `mcp_serve_stdio` start a stdio server, all within a single ~7 MB binary that also acts as a client via `mcp_use_stdio`. The example server, 'Pipe Greeting Server' version 1.0.0, can be run with `pipe examples/blog_mcp_server.pipe` and tested with `initialize`, `tools/list`, and `tools/call`.

read3 min views1 publishedAug 14, 2026
🔌 Your First MCP Server — in a Language, Not an SDK
Image: Pipe-Lang (auto-discovered)

← All posts← Alle Beiträge

Expose a plain function to Claude, Cursor, or any MCP client — in four lines, with zero dependencies.

Part of the Pipe in 30 Lines series: RAG without a vector DB · Self-healing code · Parallel LLM calls

Building an MCP server usually means picking an SDK, wiring up JSON-RPC plumbing, and shipping a runtime with dependencies. Pipe is the first language with built-in MCPai_tool

registers a function, mcp_server

  • mcp_serve_stdio

start the server.

fn greet name
    "Hello, " ++ name ++ "! Pipe speaks MCP natively."

ai_tool "greet" "Greet a person by name" {name: "Person's name"} greet

mcp_server "Pipe Greeting Server" "1.0.0"
mcp_serve_stdio

Point Claude Desktop (or Cursor, or any MCP client) at it:

{
  "mcpServers": {
    "pipe-greet": {
      "command": "/path/to/pipe",
      "args": ["examples/blog_mcp_server.pipe"]
    }
  }
}

What happens here:

turns any Pipe function into a schema'd tool — name, description, and an argument map are all it needs.ai_tool

start the server and serve the tool over stdio.mcp_server

+mcp_serve_stdio

  • The same binary that serves MCP can also consume it: mcp_use_stdio

connects to any MCP server off npm/uvx, so your LLM gets GitHub, filesystem, or database tools in the same pipeline.

There's no SDK, no package.json

, no build step. A single ~7 MB binary is both server and client — the tool you expose to Claude is the same language you write your pipeline in. That's the whole idea behind the MCP Cell: when MCP is a language primitive, the sandbox can wrap the server, the client, and the tools.

Run it yourself: pipe examples/blog_mcp_server.pipe

(it starts a stdio server — hit it with initialize

, tools/list

, then tools/call

with {"name":"greet","arguments":{"name":"Harry"}}

).

Eine normale Funktion für Claude, Cursor oder jeden MCP-Client bereitstellen — in vier Zeilen, mit null Abhängigkeiten.

Teil der Serie Pipe in 30 Lines: RAG ohne Vektor-DB · Selbstheilender Code · Parallele LLM-Calls

Einen MCP-Server zu bauen heißt sonst: SDK auswählen, JSON-RPC-Verkabelung, und eine Runtime mit Dependencies ausliefern. Pipe ist die erste Sprache mit eingebautem MCPai_tool

registriert eine Funktion, mcp_server

  • mcp_serve_stdio

starten den Server.

fn greet name
    "Hello, " ++ name ++ "! Pipe speaks MCP natively."

ai_tool "greet" "Greet a person by name" {name: "Person's name"} greet

mcp_server "Pipe Greeting Server" "1.0.0"
mcp_serve_stdio

Claude Desktop (oder Cursor, oder jeder MCP-Client) zeigt darauf:

{
  "mcpServers": {
    "pipe-greet": {
      "command": "/path/to/pipe",
      "args": ["examples/blog_mcp_server.pipe"]
    }
  }
}

Was hier passiert:

macht aus jeder Pipe-Funktion ein Tool mit Schema — Name, Beschreibung und Argument-Map reichen.ai_tool

starten den Server und servieren das Tool über stdio.mcp_server

+mcp_serve_stdio

  • Dieselbe Binary, die MCP serviert, kann es auch konsumieren: mcp_use_stdio

verbindet sich mit jedem MCP-Server von npm/uvx — dein LLM bekommt GitHub-, Dateisystem- oder Datenbank-Tools in derselben Pipeline.

Kein SDK, kein package.json

, kein Build-Schritt. Eine einzelne ~7-MB-Binary ist Server und Client — das Tool, das du Claude gibst, ist dieselbe Sprache, in der du deine Pipeline schreibst. Genau das ist die Idee hinter der MCP-Zelle: Wenn MCP ein Sprach-Primitiv ist, kann die Sandbox Server, Client und Tools gemeinsam umschließen.

Selbst ausprobieren: pipe examples/blog_mcp_server.pipe

(startet einen stdio-Server — teste mit initialize

, tools/list

, dann tools/call

mit {"name":"greet","arguments":{"name":"Harry"}}

).

── more in #developer-tools 4 stories · sorted by recency
── more on @pipe 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/your-first-mcp-serve…] indexed:0 read:3min 2026-08-14 ·