PHPRay MCP
An MCP server that allows AI agents to query production PHP performance data, including slow SQL queries, N+1 patterns, HTTP calls, and PHP errors, without requiring code access or installation.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://phpray.dev/mcpWhat its tools do
10 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to phpray.dev ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Identify slowest pages and SQL fingerprints
- Attribute performance issues to specific plugins
- Compare request traces before and after deployments
- Monitor PHP errors and warnings in production
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- phpray 0.15.7
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 10 advertised
- Resources
- 2 advertised
- Resource templates
- 0 advertised
- Prompts
- 4 advertised
{
"tools": {},
"prompts": {},
"resources": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
10 advertised
phpray_sites
List the PHP sites this token can see, with requests, p95 latency and error rate. Start here: every other tool needs a site_id from this list.
{
"type": "object",
"properties": {}
}phpray_overview
Headline numbers for one site over a time window: requests, errors, p50/p95/p99 latency, database share and N+1 count. Use this before digging into anything else.
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"site_id": {
"type": "string",
"description": "Site id from phpray_sites."
},
"window_minutes": {
"type": "integer",
"description": "How far back to look, in minutes. Default 60."
}
}
}phpray_slow_pages
The slowest URLs on a site, with request counts and p95, from the request timeseries. Answers "which page is slow".
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "How many URLs to return. Default 25."
},
"site_id": {
"type": "string",
"description": "Site id from phpray_sites."
},
"window_minutes": {
"type": "integer",
"description": "How far back to look. Default 1440."
}
}
}phpray_slow_queries
SQL fingerprints ordered by time spent, with call counts and the caller when known. Literals are already masked. Answers "which query is slow".
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "How many queries to return. Default 20."
},
"site_id": {
"type": "string",
"description": "Site id from phpray_sites."
},
"window_minutes": {
"type": "integer",
"description": "How far back to look. Default 1440."
}
}
}phpray_components
Time attributed to each plugin, theme or vendor package on profiled requests. Answers "which plugin is slowing the site down". Empty when function profiling is off.
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "How many components to return. Default 20."
},
"site_id": {
"type": "string",
"description": "Site id from phpray_sites."
},
"window_minutes": {
"type": "integer",
"description": "How far back to look. Default 1440."
}
}
}phpray_errors
Requests that failed on a site: PHP errors and warnings with file and line where PHP raised one, plus 5xx responses that carry no PHP error. Pass an id to phpray_trace to see what one of them did.
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "How many to return. Default 20."
},
"site_id": {
"type": "string",
"description": "Site id from phpray_sites."
},
"window_minutes": {
"type": "integer",
"description": "How far back to look. Default 1440."
}
}
}phpray_traces
Recent requests for a site. Filter with min_ms and status to find the bad ones, then pass an id to phpray_trace.
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"limit": {
"type": "integer",
"description": "How many to return. Default 50."
},
"min_ms": {
"type": "integer",
"description": "Only requests slower than this."
},
"status": {
"type": "integer",
"description": "Only this HTTP status, e.g. 500."
},
"site_id": {
"type": "string",
"description": "Site id from phpray_sites."
},
"window_minutes": {
"type": "integer",
"description": "How far back to look. Default 1440."
}
}
}phpray_trace
One request in full: wall time split into PHP, database and outbound HTTP, every query, every external call, errors, and the component breakdown when the request was profiled.
{
"type": "object",
"required": [
"trace_id"
],
"properties": {
"trace_id": {
"type": "string",
"description": "Trace id from phpray_traces."
}
}
}phpray_compare
Two time ranges for one site side by side. Use it to check whether a deployment, a plugin update or a configuration change made things better or worse.
{
"type": "object",
"required": [
"site_id"
],
"properties": {
"to_a": {
"type": "integer",
"description": "End of range A, unix seconds."
},
"to_b": {
"type": "integer",
"description": "End of range B, unix seconds."
},
"from_a": {
"type": "integer",
"description": "Start of range A (the earlier one), unix seconds. Without any range: the day before yesterday's 24 h against the last 24 h."
},
"from_b": {
"type": "integer",
"description": "Start of range B, unix seconds."
},
"site_id": {
"type": "string",
"description": "Site id from phpray_sites."
}
}
}phpray_alerts
Alerts currently firing across every site this token can see, worst overrun first.
{
"type": "object",
"properties": {}
}Prompts
4 advertised
what_is_slow — What is slow here?
Walk the fleet, find the site that hurts most and say why — in plain words.
which_plugin_costs_most — Which plugin costs the most?
Attribute request time to WordPress plugins and themes, with the numbers.
what_is_failing — Is anything failing right now?
Check alerts and failing requests, and separate real breakage from scanner noise.
what_got_worse — Did anything get worse?
Compare two time windows to see whether a deploy or an update made things slower.
Resources
2 advertised
Install PHPRay on your own PHP site
How the person you are helping gets this on their own server, including shared hosting where no agent can be installed.
phpray://installWhat this demo account is, and what it is not
The scope and limits of the public read-only account these tools answer from.
phpray://demo90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1913 ms
- 95th percentile latency
- 1913 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1913 ms · metadata changed · 10 tool(s), 2 resource(s), 0 resource template(s), 4 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http phpray-mcp https://phpray.dev/mcpCodex
codex mcp add phpray-mcp --url https://phpray.dev/mcpCursor
{
"mcpServers": {
"phpray-mcp": {
"url": "https://phpray.dev/mcp"
}
}
}Cline
{
"mcpServers": {
"phpray-mcp": {
"type": "streamableHttp",
"url": "https://phpray.dev/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"phpray-mcp": {
"type": "http",
"url": "https://phpray.dev/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http phpray-mcp https://phpray.dev/mcpClaude Desktop
https://phpray.dev/mcpWindsurf
{
"mcpServers": {
"phpray-mcp": {
"serverUrl": "https://phpray.dev/mcp"
}
}
}Let your agent find its tools
Find servers like PHPRay MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other developer tools servers
Do you run PHPRay MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.