Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/dalehurley/php-mcp-sdkWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/rules/dalehurley/php-mcp-sdk/php-server-implementation)<a href="https://agentmods.dev/rules/dalehurley/php-mcp-sdk/php-server-implementation"><img src="https://agentmods.dev/badge/rules/dalehurley/php-mcp-sdk/php-server-implementation/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/rules/dalehurley/php-mcp-sdk/php-server-implementation"><img src="https://agentmods.dev/badge/rules/dalehurley/php-mcp-sdk/php-server-implementation.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00008 | $0.01616 |
| Opus 5.5 | $0.00003 | $0.00646 |
| Sonnet 5.5 | $0.00002 | $0.00323 |
| Haiku 4.5 | $0.00001 | $0.00162 |
Grade A, and why
php-server-implementation scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 289 lines — stays where its author put it; the contents beside it link to each section on GitHub.
PHP MCP Server Implementation Guide
High-Level McpServer Class
The McpServer class provides a simplified API for creating MCP servers. It wraps the lower-level Server class.
Basic Server Structure
namespace MCP\Server;
use MCP\Types\Implementation;
use MCP\Shared\Transport;
use React\Promise\Promise;
class McpServer {
private Server $server;
private array $registeredTools = [];
private array $registeredResources = [];
private array $registeredResourceTemplates = [];
private array $registeredPrompts = [];
public function __construct(Implementation $serverInfo, ?ServerOptions $options = null) {
$this->server = new Server($serverInfo, $options);
}
public function connect(Transport $transport): Promise {
return $this->server->connect($transport);
}
}
Registering Tools
/**
* Register a tool with validation schema and handler
*/
public function registerTool(
string $name,
array $config,
callable $handler
): RegisteredTool {
// Tool configuration includes:
// - title: Display name
// - description: Tool description
// - inputSchema: Input validation schema
// - outputSchema: Optional output schema
// - annotations: Tool hints
$tool = new RegisteredTool($name, $config, $handler);
$this->registeredTools[$name] = $tool;
// Emit list changed notification if connected
if ($this->server->isConnected()) {
$this->server->sendNotification([
'method' => 'notifications/tools/list_changed'
]);
}
return $tool;
}
Registering Resources
/**
* Register a static resource
*/
public function registerResource(
string $name,
string $uri,
array $metadata,
callable $handler
): RegisteredResource {
$resource = new RegisteredResource($name, $uri, $metadata, $handler);
$this->registeredResources[$uri] = $resource;
return $resource;
}
/**
* Register a resource template for dynamic resources
*/
public function registerResourceTemplate(
string $name,
UriTemplate $template,
array $metadata,
callable $handler
): RegisteredResourceTemplate {
$resourceTemplate = new RegisteredResourceTemplate($name, $template, $metadata, $handler);
$this->registeredResourceTemplates[$name] = $resourceTemplate;
return $resourceTemplate;
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 289 lines · 8 tokens per session scan A 44067480ce56
php-server-implementation is a cursor rule published in the GitHub repository dalehurley/php-mcp-sdk (27 stars, last pushed 10mo ago), licensed MIT. It adds 8 tokens to every session and 1,616 once invoked, about $0.0000 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other cursor rules, from other repositories
atelier
Atelier UI/UX and Backend Architecture Quality Gate.
laravel-php-83-cursorrules-prompt-file
Cursor rules for Laravel development with PHP 8.3 integration.
laravel
Core Laravel architecture and coding conventions.
backend
Essential backend patterns and commands for PHP/Symfony.
skill-laravel-api
Padrões Globais para Projetos Laravel API (Context Engineering).
laravel-php-83-cursorrules-prompt-file
description: "Cursor rules for Laravel development with PHP 8.3 integration." globs: / alwaysApply: false.