@pulspeed/mcp-server
Allows retrieving full Lighthouse audit data for detailed performance analysis.
Allows triggering PageSpeed Insights scans to gather performance metrics like Core Web Vitals.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@pulspeed/mcp-serverscan https://example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@pulspeed/mcp-server
Website performance monitoring for AI agents.
Pulspeed MCP server exposes 10 tools for scanning sites, reading Core Web Vitals, detecting regressions, and getting AI-powered recommendations — all callable by Claude, Cursor, Windsurf, and any MCP-compatible agent.
Quick Setup
Get an API key
Sign up at pulspeed.ai → Settings → API Tokens → create a token.
Claude Code (CLI)
claude mcp add pulspeed -e PULSPEED_API_KEY=your_token_here -- npx -y @pulspeed/mcp-serverClaude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"pulspeed": {
"command": "npx",
"args": ["-y", "@pulspeed/mcp-server"],
"env": {
"PULSPEED_API_KEY": "your_token_here"
}
}
}
}Cursor
Edit .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"pulspeed": {
"command": "npx",
"args": ["-y", "@pulspeed/mcp-server"],
"env": {
"PULSPEED_API_KEY": "your_token_here"
}
}
}
}Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"pulspeed": {
"command": "npx",
"args": ["-y", "@pulspeed/mcp-server"],
"env": {
"PULSPEED_API_KEY": "your_token_here"
}
}
}
}Related MCP server: Lighthouse MCP
Tools
All tools that identify a site accept either url or site_id.
scan_site
Trigger a PageSpeed Insights scan. Creates the site automatically if not yet tracked. Blocks until done (~30–60s) by default.
Param | Type | Required | Description |
| string | ✓ | URL to scan |
|
| — | Default: |
| boolean | — |
|
bulk_scan
Scan multiple URLs at once (max 10). All jobs are dispatched immediately.
Param | Type | Required | Description |
| string[] | ✓ | 1–10 URLs |
|
| — | Default: |
| boolean | — |
|
list_sites
List all monitored sites with latest scores and scan settings.
get_site_metrics
Core Web Vitals for a site with trend analysis and score history.
Param | Type | Required | Description |
| string | ✓ or | Site URL |
| number | ✓ or | Pulspeed site ID |
|
| — | History window (default: |
get_recommendations
AI-powered optimisation recommendations from the latest scan analysis. Requires Developer or Scale plan.
compare_snapshots
Compare two scans with % deltas and a human-readable assessment (🟢 Significant improvement → 🔴 Significant regression).
Param | Type | Description |
| — | Site identifier (compares latest two) |
| number | Specific newer snapshot |
| number | Specific older snapshot |
list_regressions
Find consecutive scans where the performance score dropped significantly.
Param | Type | Description |
| — | Site identifier |
| number | Min score drop to count (default: |
| number | Scan history to analyse (default: |
get_usage
Current billing-period consumption: scans used/remaining, AI analyses, plan limits.
set_performance_budget
Set metric thresholds for a site. Violations trigger threshold.exceeded webhook events on the next scan.
Param | Type | Description |
| — | Site identifier |
|
| e.g. |
|
| Max LCP in ms, e.g. |
|
| Max FCP in ms |
|
| Max TBT in ms |
|
| Max TTFB in ms |
|
| Max CLS, e.g. |
get_raw_audit
Full Lighthouse audit data for a specific audit key — detailed resource-level breakdown.
Param | Type | Required | Description |
| — | ✓ or | Site identifier |
| number | — | Specific snapshot (default: latest) |
| string | ✓ | Lighthouse audit key |
Common audit keys: render-blocking-resources, bootup-time, unused-javascript, uses-optimized-images, network-requests, uses-text-compression.
Example Prompts
"Scan https://mysite.com and tell me the performance score"
"What's the LCP trend for mysite.com over the last 30 days?"
"My site slowed down today — what changed?"
"Scan all pages: homepage, /about, /blog and compare their scores"
"Set a performance budget: score ≥ 80, LCP ≤ 2500ms"
"Show me the render-blocking resources slowing down mysite.com"Example: Diagnose a regression
User: "My Lighthouse score dropped 12 points overnight. What happened?"
→ list_regressions(url="https://mysite.com", threshold=5)
"🔴 CRITICAL −12 pts: 78 → 66 on 2026-02-22 (snapshot #142)"
→ compare_snapshots(url="https://mysite.com")
"LCP: 2100ms → 3800ms (+81% ✗) TBT: 180ms → 520ms (+189% ✗)"
→ get_raw_audit(url="https://mysite.com", audit_key="bootup-time")
"analytics-v2.js — 1840ms execution. Saves 1.2s if deferred."
Agent: "A new analytics script blocks the main thread for 1.84s,
causing LCP and TBT to spike. Defer or async-load it."Environment Variables
Variable | Required | Default | Description |
| ✓ | — | API token from pulspeed.ai/settings |
| — |
| Override for self-hosted |
Plans
All plans include MCP access. Quotas apply:
Plan | Scans/month | AI Analysis | Webhooks |
Free | 30 | 5/month | — |
Developer ($29) | 500 | Included | 5 endpoints |
Scale ($79) | 2,000 | Included | 20 endpoints |
Development
git clone https://github.com/pulspeed/mcp-server
cd mcp-server
npm install
npm run build # compile TypeScript → dist/
npm run dev # watch mode
npm start # run compiled serverLicense
MIT © Pulspeed
Available Tools
10 toolsbulk_scanA
Scan multiple URLs at once. By default runs scans asynchronously and returns job IDs for polling. Set wait=true to run sequentially and return all results (slower, may take several minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | List of URLs to scan (max 10) | |
| wait | No | If true, wait for all scans to complete and return results. If false (default), dispatch all jobs and return job IDs immediately. | |
| strategy | No | Scan strategy: mobile or desktop (default: mobile) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: async default, synchronous option with wait=true, and performance impact. However, it does not mention rate limits, authentication, or potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no unnecessary words. Ideal structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains return types (job IDs vs results) but not their structure. Strategy parameter is not addressed. Still, core functionality is well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds limited value beyond parameter descriptions. The mention of max 10 URLs is already in the schema. The async/sync behavior is tied to wait, which is also described in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans multiple URLs at once, contrasting with the sibling scan_site which likely scans a single URL. It provides a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives guidance on when to use async vs synchronous mode, but does not explicitly address when to choose this tool over alternatives like scan_site for single URLs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_snapshotsA
Compare two performance snapshots for a website. Shows metric deltas with percentage changes and a human-readable assessment. By default compares the latest two snapshots, or specify snapshot IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The URL of the website to compare snapshots for | |
| site_id | No | The Pulspeed site ID (alternative to URL) | |
| snapshot_id_a | No | ID of the first (newer) snapshot to compare | |
| snapshot_id_b | No | ID of the second (older) snapshot to compare |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description discloses output format but lacks details on error handling, prerequisites, or whether it modifies data. Implies read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently describe purpose, output, default behavior, and optional parameters. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains output includes metric deltas and a human-readable assessment. With no output schema, this provides adequate context. Could specify which metrics are compared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 4 parameters; description adds context about default behavior (latest two snapshots) and the optional nature of snapshot IDs, going beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool compares two performance snapshots for a website, showing metric deltas and a human-readable assessment. Distinguishes from sibling tools like list_sites or get_site_metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides default behavior (latest two snapshots) and optional explicit IDs, but does not explicitly state when to use this tool versus alternatives like get_site_metrics or get_recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_raw_auditA
Get the raw Lighthouse audit data for a specific audit key from the latest snapshot of a site (e.g. 'render-blocking-resources', 'bootup-time', 'unused-javascript'). Returns detailed audit items useful for debugging specific performance issues.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The URL of the website | |
| site_id | No | The Pulspeed site ID (alternative to URL) | |
| audit_key | Yes | Lighthouse audit key to retrieve, e.g. 'render-blocking-resources', 'bootup-time', 'unused-javascript', 'uses-optimized-images', 'network-requests' | |
| snapshot_id | No | Specific snapshot ID to query. Defaults to the latest snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It correctly implies a read operation but does not explicitly disclose behavioral traits such as authentication needs, rate limits, or whether it modifies data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no unnecessary words. The purpose is front-loaded in the first sentence, and the second sentence adds context on use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no nested objects, the description is mostly complete. It explains what the tool returns ('detailed audit items') and the source ('from the latest snapshot'), though it could briefly state that the output is an array or object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds examples of audit_key values but does not provide additional semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'raw Lighthouse audit data for a specific audit key' with examples. It is distinct from sibling tools in purpose but does not explicitly differentiate from similar audit-related tools like get_recommendations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for debugging performance issues ('useful for debugging specific performance issues'), but lacks explicit guidance on when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationsA
Get AI-powered performance recommendations for a monitored website. Requires Pro or Team plan.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The URL of the website to get recommendations for | |
| site_id | No | The Pulspeed site ID (alternative to URL) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially discloses behavior (AI-powered, plan requirement) but does not mention side effects, rate limits, or whether the operation is read-only. This is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no unnecessary words. The first sentence states the purpose, the second adds a prerequisite. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks details about the output format (e.g., list of recommendations) and does not explain what 'monitored' implies. Given the complexity (no output schema), it could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds no additional meaning beyond the parameter descriptions found in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get AI-powered performance recommendations') and the resource ('for a monitored website'). It effectively distinguishes from sibling tools like get_raw_audit and get_site_metrics by specifying 'recommendations'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the prerequisite ('Requires Pro or Team plan') but lacks guidance on when to use this tool versus alternatives, or how to choose between the two input parameters (url vs. site_id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_metricsA
Get performance metrics for a monitored website, including Core Web Vitals (FCP, LCP, TTI, TBT, TTFB, CLS), trend analysis, and historical data over a specified period.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The URL of the website to get metrics for | |
| period | No | Time period for history (default: 7d) | |
| site_id | No | The Pulspeed site ID (alternative to URL) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It mentions the tool returns metrics and trend analysis but does not disclose that it is a read-only operation, potential side effects, rate limits, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the key purpose and lists included metrics without unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers what the tool does and its returned data types. However, it lacks details on whether url or site_id is required, the output format, and whether historical data is aggregated or per-time-step.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented. The description adds context about metrics and trend analysis but does not elaborate on the relationship between url and site_id, or the default behavior of the period parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'performance metrics for a monitored website', listing specific metrics like Core Web Vitals. It distinguishes from siblings by focusing on retrieval rather than scanning or comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving historical metrics but does not provide explicit guidance on when to use this tool versus alternatives like scan_site or compare_snapshots. No exclusions or best practices are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageA
Get current API usage statistics: how many scans and AI analyses have been used this month, remaining quota, and plan limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It clearly explains the output (scans, AI analyses, quota, limits) and the verb 'Get' implies a read-only operation. However, it does not explicitly state that no side effects occur, and it omits any auth requirements or rate limits. Still, it is sufficiently transparent for a simple statistics tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and immediately details the return values. Every word is informative, and there is no redundancy or filler. It is as concise as possible while being complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and sibling tools that perform distinctly different actions (scanning, comparing, auditing), this description fully covers what the tool does. It tells the agent exactly what information it will receive, which is sufficient for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4 per evaluation rules. The description does not need to add parameter documentation as there are none. It correctly omits any parameter-related text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' and clearly names the resource 'API usage statistics'. It lists the exact data returned (scans, AI analyses, remaining quota, plan limits), which distinguishes this tool from siblings like bulk_scan, scan_site, etc., that perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but provides no guidance on when to use it versus alternatives. No mention of when it is appropriate to call this tool (e.g., before scanning to check limits) or when not to use it. The context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_regressionsB
Show recent performance regressions for a site: consecutive scans where the performance score dropped significantly. Helps identify when and by how much the site degraded.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The URL of the website | |
| limit | No | Number of recent snapshots to analyse (default: 20) | |
| site_id | No | The Pulspeed site ID (alternative to URL) | |
| threshold | No | Minimum score drop to be considered a regression (default: 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions it reads data (regressions) but lacks specifics: no mention of data freshness, pagination, rate limits, or whether it's read-only. The return format is only vaguely implied ('when and by how much').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action. Every sentence serves a clear purpose. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description only vaguely mentions showing 'when and by how much' the site degraded. It does not specify what the output contains (e.g., list of snapshots, dates, scores). Also, with 4 optional parameters, it doesn't clarify that either url or site_id is likely needed – it treats them as optional, but the phrase 'for a site' suggests one is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add parameter-level details beyond the schema; it only reinforces the concept of regression detection. No extra semantic value provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and resource ('recent performance regressions for a site'), and defines what regressions are (consecutive scans with significant drop). This clearly distinguishes it from sibling tools like get_site_metrics or compare_snapshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when identifying regressions ('Helps identify when and by how much the site degraded'), but it does not explicitly state prerequisites (e.g., need for historical scans) or compare with alternatives. No guidance on when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesA
List all websites being monitored by Pulspeed. Returns site names, URLs, scan frequency, and strategy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes a read operation that returns specific fields, but does not mention pagination, rate limits, or any constraints. This is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence efficiently states the tool's purpose and return information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description adequately explains the return values. It lacks any mention of ordering or pagination, but for a simple listing tool, it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has no parameters and schema description coverage is 100%. Per guidelines, baseline is 3. The description adds no parameter info, which is acceptable as there are none to describe.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all websites monitored by Pulspeed and specifies the returned fields (names, URLs, scan frequency, strategy). This distinguishes it from siblings like scan_site or get_site_metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly communicates when to use (when you need a list of all sites) but does not provide explicit guidance on alternatives or when not to use. Given the tool's simplicity, this is adequate but lacks explicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_siteA
Trigger a PageSpeed Insights scan for a website URL. Creates the site if not already tracked. By default waits for the scan to complete and returns performance metrics (30-60 seconds). Set wait=false to dispatch asynchronously and get a job_id for polling.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The full URL to scan (e.g., https://example.com) | |
| wait | No | If true (default), wait for scan to complete and return results. If false, dispatch asynchronously and return job_id immediately. | |
| strategy | No | Scan strategy: mobile or desktop (default: mobile) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It reveals that the site is created if untracked, the default wait duration (30-60 seconds), and the async polling option. However, it does not mention rate limits, authentication, or return structure details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the action, and every sentence earns its place. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters, no output schema, and no annotations, the description covers the main workflow, async option, and time expectation. It could mention return value structure (e.g., performance metrics object) but remains reasonably complete for a simple scan tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions. The description adds valuable context: the url parameter triggers site creation if needed, and the wait parameter explains the sync vs async tradeoff. The strategy parameter is not elaborated but is well-documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it triggers a PageSpeed Insights scan for a single URL, creating the site if needed. It distinguishes from bulk_scan and other sibling tools by focusing on a single URL scan with optional async behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on the wait parameter (default synchronous vs async polling) but does not explicitly compare to sibling tools like bulk_scan or compare_snapshots. It lacks 'when to use' and 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_performance_budgetA
Set performance budget thresholds for a site. When a scan violates these thresholds, webhook events (threshold.exceeded, performance.regression) will fire. Pass null to remove all budgets.
| Name | Required | Description | Default |
|---|---|---|---|
| cls | No | Cumulative Layout Shift budget | |
| fcp | No | First Contentful Paint budget in milliseconds | |
| lcp | No | Largest Contentful Paint budget in milliseconds | |
| tbt | No | Total Blocking Time budget in milliseconds | |
| url | No | The URL of the website | |
| ttfb | No | Time to First Byte budget in milliseconds | |
| site_id | No | The Pulspeed site ID (alternative to URL) | |
| performance_score | No | Minimum acceptable performance score (0-100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses key side effects: that violating thresholds triggers webhook events and that passing null removes all budgets. This goes beyond basic function but does not mention authorization needs or whether it overwrites existing budgets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every sentence provides unique information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description adequately explains purpose and side effects but does not describe the return value or provide examples of how to structure nested parameters. It is minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by noting that passing null removes all budgets, but does not provide additional per-parameter context beyond what the schema already contains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'set' and the resource 'performance budget thresholds for a site'. It distinguishes from sibling tools like scan_site and get_site_metrics, which are for scanning or reading metrics, while this tool is for configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for setting thresholds but provides no explicit guidance on when to use this tool versus alternatives like scan_site or get_site_metrics. It does not mention when not to use it or what prerequisites exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v1.1.0- First observed
bulk_scan - First observed
compare_snapshots - First observed
get_raw_audit - First observed
get_recommendations - First observed
get_site_metrics - First observed
get_usage - First observed
list_regressions - First observed
list_sites - First observed
scan_site - First observed
set_performance_budget
TDQS
Each tool targets a distinct aspect of performance monitoring: scanning (single or bulk), metrics, audit details, recommendations, budgets, usage, regressions, and site listing. Even similar tools like bulk_scan and scan_site are differentiated by their input type and behavior.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., scan_site, list_sites, set_performance_budget). No mixing of conventions or vague verbs.
With 10 tools, the set is well-scoped for a performance monitoring API. Each tool serves a clear purpose without unnecessary overlap or missing essential functions.
The tool set covers core operations: scanning, metrics, comparisons, budgets, recommendations, and usage. A minor gap is the absence of a tool to delete a site or snapshot, but the provided functionality is sufficient for common workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Website performance monitoring: scans, Core Web Vitals, RUM data and alerts.
- gtmetrixOAuthcom.gtmetrix
Analyze web performance and get optimization insights from GTmetrix, directly in your AI workflow.
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
- VibeSEOOAuthdev.vibeseo
SEO research, audits, backlinks, GSC, and content workflow tools for AI agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI models to analyze webpage performance using the Google PageSpeed Insights API, providing real-time performance scores and improvement suggestions.125712MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI models to perform Google Lighthouse website performance analysis, including Core Web Vitals, accessibility, SEO audits, and actionable optimization recommendations. Provides comprehensive web performance insights through natural language interactions.1,3543MIT
- AlicenseNot gradedqualityDmaintenanceMonitor website health, uptime, SEO, security and performance via your AI assistant.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to control and inspect a live Chrome browser for automated web debugging, performance analysis, and Lighthouse audits. It allows agents to capture screenshots, monitor network requests, and measure Core Web Vitals using plain-English prompts.3,288,165Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pulspeed/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server