Developer docs
API and MCP
Programmatic access and AI-agent access to Plugin Pulse's plugin intelligence: installs, history, health, ranking optimization, rivals, and news. Same numbers as the site, from our database.
Authentication
Keys are pp_live_… tokens.
Send them on every request:
Authorization: Bearer pp_live_your_key_here
Each key has an hourly rate limit (default 1,000 requests/hour). REST responses include
x-ratelimit-remaining.
Hitting the limit returns 429.
Self-serve key issuance isn't live yet. Keys are issued to members. To request early access, join the waitlist on Premium or email [email protected].
REST API
Base URL: https://plugins.wpmayor.com.
All endpoints require a Bearer key. Plugin objects use the field names below (snake_case).
GET /api/v1/plugin/{slug}
Current state for one plugin. Optionally include daily snapshots and install-band milestones.
Parameters
-
slugpath, required WordPress.org plugin slug (e.g. contact-form-7). -
historyquery, optional Set to 1 or true to include snapshots and milestones. -
daysquery, optional History window when history=1. Default 365, max 1500.
Example request
curl "https://plugins.wpmayor.com/api/v1/plugin/contact-form-7" \
-H "Authorization: Bearer pp_live_your_key_here" Example response
{
"plugin": {
"slug": "contact-form-7",
"name": "Contact Form 7",
"author": "Takayuki Miyoshi",
"category": "forms",
"active_installs": 5000000,
"downloaded": 380000000,
"downloads_30d": 1200000,
"momentum_ratio": 1.02,
"rating": 84,
"num_ratings": 2100,
"adjusted_stars": 4.2,
"support_threads": 40,
"support_threads_resolved": 28,
"version": "6.0",
"requires": "6.0",
"tested": "6.7",
"requires_php": "7.4",
"last_updated": "2026-01-15 12:00:00",
"added": "2007-09-01",
"health_overall": 88,
"health_grade": "A",
"integrity": "clean",
"closed_date": null,
"icon": "https://...",
"last_crawled": "2026-07-18T08:00:00.000Z",
"url": "https://plugins.wpmayor.com/plugin/contact-form-7",
"wporg_url": "https://wordpress.org/plugins/contact-form-7/"
},
"generated_at": "2026-07-18T12:00:00.000Z"
} GET /api/v1/plugins
Current state for up to 50 plugins in one call. Missing slugs return { slug, found: false }.
Parameters
-
slugsquery, required Comma-separated plugin slugs (max 50).
Example request
curl "https://plugins.wpmayor.com/api/v1/plugins?slugs=contact-form-7,woocommerce" \
-H "Authorization: Bearer pp_live_your_key_here" Example response
{
"generated_at": "2026-07-18T12:00:00.000Z",
"plugins": [
{
"slug": "contact-form-7",
"name": "Contact Form 7",
"active_installs": 5000000,
"health_grade": "A",
"url": "https://plugins.wpmayor.com/plugin/contact-form-7"
},
{
"slug": "woocommerce",
"name": "WooCommerce",
"active_installs": 5000000,
"health_grade": "A",
"url": "https://plugins.wpmayor.com/plugin/woocommerce"
}
]
} GET /api/v1/search
Plugins whose name or slug matches a term. Full serializePlugin objects.
Parameters
-
qquery, required Search term (min 2 characters). -
limitquery, optional Max results. Default 20, max 50.
Example request
curl "https://plugins.wpmayor.com/api/v1/search?q=rss&limit=10" \
-H "Authorization: Bearer pp_live_your_key_here" Example response
{
"query": "rss",
"count": 10,
"plugins": [
{
"slug": "wp-rss-aggregator",
"name": "WP RSS Aggregator",
"active_installs": 40000,
"rating": 90,
"health_grade": "A",
"url": "https://plugins.wpmayor.com/plugin/wp-rss-aggregator"
}
]
} Plugin object fields
Every REST plugin payload (and MCP get_plugin) uses these names:
slug, name, author, category,
active_installs, downloaded, downloads_30d, momentum_ratio,
rating, num_ratings, adjusted_stars,
support_threads, support_threads_resolved,
version, requires, tested, requires_php,
last_updated, added,
health_overall, health_grade, integrity, closed_date,
icon, last_crawled,
url, wporg_url
With ?history=1, the single-plugin endpoint also returns
snapshots
(date,
active_installs,
downloaded,
downloads_30d,
rating,
num_ratings,
rank_position,
health_overall)
and milestones.
MCP server
Point Claude, Cursor, or any MCP client at Plugin Pulse and query plugins without opening the site.
Transport is Streamable HTTP (JSON-RPC 2.0 over POST, application/json responses).
Endpoint
https://plugins.wpmayor.com/api/mcp
Auth: same Bearer key as the REST API
(Authorization: Bearer pp_live_…).
If your client can't set headers, you can pass
?key=pp_live_… on the URL.
Missing or invalid credentials return JSON-RPC error with HTTP 401 (429 when rate-limited).
A browser GET on the endpoint returns a discovery blob (name, transport, tools list, auth hints).
Add to Claude / Cursor
Paste a config like this into your MCP client settings. Exact field names and UI labels vary by client; you need the URL plus an Authorization header with your key.
{
"mcpServers": {
"plugin-pulse": {
"url": "https://plugins.wpmayor.com/api/mcp",
"headers": {
"Authorization": "Bearer pp_live_your_key_here"
}
}
}
} Tools
Seven tools today. Valuation, competitive alerts, and market-report tools are coming as more premium features ship.
search_plugins
Search the index by name or slug. Returns matching plugins with installs, ratings, and categories.
- Params
- query (string, required), limit (number, default 10, max 25)
- Returns
- { query, count, plugins: [{ slug, name, active_installs, rating, num_ratings, category }] }
get_plugin
Full snapshot: installs, downloads, ratings, health, integrity, plus an estimated install band.
- Params
- slug (string, required)
- Returns
- { plugin: serializePlugin, install_estimate, generated_at }
plugin_history
Daily history: installs, downloads, rating, directory rank, health, plus milestone band crossings.
- Params
- slug (string, required), days (number, default 365, max 1500)
- Returns
- { slug, days, snapshots: [{ date, active_installs, downloaded, rating, rank_position, health_overall }], milestones }
ranking_optimization
How well a listing is tuned for wp.org search on factors the owner controls. Overall 0-100, factor breakdown, top fix.
- Params
- slug (string, required)
- Returns
- { slug, overall, factors: [{ key, label, score, weight, hint }], topFix }
closure_risk
Maintenance and integrity risk signals that often precede a wp.org closure. Score 0-100 with level low/elevated/high.
- Params
- slug (string, required)
- Returns
- { slug, score, level, factors, integrity }
competitors
Closest rival plugins, ranked by shared wp.org tags then install reach.
- Params
- slug (string, required), limit (number, default 6, max 20)
- Returns
- { slug, count, competitors: [{ slug, name, active_installs, health_grade, health_overall, adjusted_stars, shared_tags }] }
latest_news
Recent release notes and news from the best source (blog RSS, GitHub releases, or wp.org changelog).
- Params
- slug (string, required), limit (number, default 6, max 25)
- Returns
- { slug, count, items: [{ title, url, version, summary, published, source }] }
Example: tools/call
Call ranking_optimization for a plugin:
curl -X POST "https://plugins.wpmayor.com/api/mcp" \
-H "Authorization: Bearer pp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ranking_optimization",
"arguments": { "slug": "contact-form-7" }
}
}' Trimmed result (tool payload is JSON text inside MCP content blocks):
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\n \"slug\": \"contact-form-7\",\n \"overall\": 86,\n \"factors\": [\n { \"key\": \"freshness\", \"label\": \"Update recency\", \"score\": 100, \"weight\": 25, \"hint\": \"...\" },\n { \"key\": \"compatibility\", \"label\": \"WP compatibility\", \"score\": 90, \"weight\": 20, \"hint\": \"...\" }\n ],\n \"topFix\": null\n}"
}
]
}
} Rate limits and support
Default limit is 1,000 requests per key per hour. REST responses set
x-ratelimit-remaining;
over the limit returns 429.
MCP rate limits use the same per-key window.
Questions or key requests: [email protected]. For membership and early access, see Plugin Pulse Premium.
Data from the public WordPress.org APIs plus our daily crawl and historical archive. Not affiliated with WordPress.org.