Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Zeromcp Php

FreeNot checked

ZeroMCP php — drop a tool, get a sandboxed MCP server (read-only subtree split)

GitHubEmbed

About

ZeroMCP php — drop a tool, get a sandboxed MCP server (read-only subtree split)

README

Drop a .php file in a folder, get a sandboxed MCP server. Stdio out of the box, zero dependencies.

Getting started

<?php
// tools/hello.php — this is a complete MCP server
return [
    'description' => 'Say hello to someone',
    'input' => ['name' => 'string'],
    'execute' => function ($args, $ctx) {
        return "Hello, {$args['name']}!";
    },
];
php zeromcp.php serve ./tools

That's it. Stdio works immediately. Drop another .php file to add another tool. Delete a file to remove one.

vs. the official SDK

The official PHP SDK (backed by The PHP Foundation) requires Composer, server setup, transport configuration, and explicit tool registration. ZeroMCP is file-based — each tool is its own file, discovered automatically. Pure PHP, no Composer, no extensions.

In benchmarks, ZeroMCP PHP handles 13,333 requests/second over stdio versus the official SDK's 18 — 740x faster. Over HTTP (Slim), ZeroMCP serves 1,561 rps at 11-33 MB versus the official SDK's 17 rps at 31-64 MB. The official SDK takes 54ms per request. ZeroMCP takes 0.53ms. The official SDK corrupted responses on giant strings and slow tools in chaos testing. ZeroMCP survived 22/22 attacks.

The official SDK has no sandbox. ZeroMCP lets tools declare network, filesystem, and exec permissions.

PHP passes all 10 conformance suites.

HTTP / Streamable HTTP

ZeroMCP doesn't own the HTTP layer. You bring your own framework; ZeroMCP gives you a handleRequest method that takes an associative array and returns an array (or null for notifications).

// $response = $server->handleRequest($request);

Slim

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

$app = AppFactory::create();

$app->post('/mcp', function (Request $req, Response $res) use ($server) {
    $body = json_decode((string) $req->getBody(), true);
    $response = $server->handleRequest($body);

    if ($response === null) {
        return $res->withStatus(204);
    }
    $res->getBody()->write(json_encode($response));
    return $res->withHeader('Content-Type', 'application/json');
});

$app->run();

Requirements

  • PHP CLI (no extensions required)

Sandbox

<?php
return [
    'description' => 'Fetch from our API',
    'input' => ['url' => 'string'],
    'permissions' => [
        'network' => ['api.example.com', '*.internal.dev'],
        'fs' => false,
        'exec' => false,
    ],
    'execute' => function ($args, $ctx) {
        // ...
    },
];

Directory structure

Tools are discovered recursively. Subdirectory names become namespace prefixes:

tools/
  hello.php          -> tool "hello"
  math/
    add.php          -> tool "math_add"

Testing

for f in tests/*Test.php; do php "$f"; done

from github.com/antidrift-dev/zeromcp-php

Installing Zeromcp Php

This server has no published package — it is built from source. Open the repository and follow its README.

▸ github.com/antidrift-dev/zeromcp-php

FAQ

Is Zeromcp Php MCP free?

Yes, Zeromcp Php MCP is free — one-click install via Unyly at no cost.

Does Zeromcp Php need an API key?

No, Zeromcp Php runs without API keys or environment variables.

Is Zeromcp Php hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Zeromcp Php in Claude Desktop, Claude Code or Cursor?

Open Zeromcp Php on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare Zeromcp Php with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All development MCPs