网页性能分析服务

一个提供网页性能分析和Chrome用户体验报告(CrUX)数据的服务,支持Go和C#实现,无需额外运行时环境。

  • by ncosentino
  • C#
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 ncosentino/google-psi-mcp

使用说明

PageSpeed洞察和CrUX MCP服务器

Google PageSpeed Insights和Chrome用户体验的原生Go和C#MCP服务器 报告。服务器将真实用户字段数据与合成Lighthouse分开 实验室数据并揭示了当前Lighthouse 13的见解,而不会使其变得平坦 结构化细节。

预构建的二进制文件不需要Go。NET、Node.js或Python运行时环境。

能力

  • 来自PSI嵌入式CrUX响应的真实用户页面和原始数据
  • 真正的核心网络生命:LCP、CLS和INP
  • Lighthouse实验室指标、类别分数、执行元数据和重定向
  • Lighthouse 13洞察细节和指标节约
  • 可选的实验性代理浏览、WebMCP和 llms.txt 审计
  • 直流CrUX数据,包括LCP子部件、RTT和导航类型
  • 每周多达40个CrUX历史API收集期
  • STDIO和无状态流式HTTP MCP传输
  • 匹配Go和C#原生AOT实现

Google API设置

  1. 在中创建或选择项目 谷歌云控制台.
  2. 启用 PageSpeed洞察API.
  3. 创建API密钥。
  4. 使用 get_crux_data 或 get_crux_history,也启用 Chrome用户体验报告API.
  5. 如果密钥有API限制,请允许您打算使用的每个API。

当Chrome用户体验报告时,直接的CrUX工具返回谷歌的权限错误 API被密钥的限制禁用或排除。PSI分析继续 独立工作。

安装

从下载二进制文件 GitHub发布:

平台 Go C#原生AOT
Linux x64 psi-mcp-go-linux-amd64 psi-mcp-csharp-linux-x64
Linux ARM64 psi-mcp-go-linux-arm64 psi-mcp-csharp-linux-arm64
macOS英特尔 psi-mcp-go-darwin-amd64 psi-mcp-csharp-osx-x64
macOS苹果硅 psi-mcp-go-darwin-arm64 psi-mcp-csharp-osx-arm64
Windows x64 psi-mcp-go-windows-amd64.exe psi-mcp-csharp-win-x64.exe
Windows ARM64 psi-mcp-go-windows-arm64.exe psi-mcp-csharp-win-arm64.exe

发布资产还包括 manage-mcp-service.ps1 用于运行二进制文件 作为一个共享的本地服务。

在Linux或macOS上:

chmod +x psi-mcp-go-linux-amd64

STDIO配置

{
  "mcpServers": {
    "pagespeed-insights": {
      "type": "stdio",
      "command": "/path/to/psi-mcp-go-linux-amd64",
      "args": [],
      "env": {
        "GOOGLE_PSI_API_KEY": "your-api-key"
      }
    }
  }
}

密钥可以改为传递 --api-key 或从 GOOGLE_PSI_API_KEY 进入a .env 文件。

HTTP传输

./psi-mcp-go-linux-amd64 \
  --transport http \
  --listen-address 127.0.0.1 \
  --port 8080 \
  --allowed-hosts localhost,127.0.0.1

共享MCP端点为 http://127.0.0.1:8080/mcp;服务主管可以 探针 http://127.0.0.1:8080/health.

{
  "mcpServers": {
    "pagespeed-insights": {
      "type": "http",
      "url": "http://127.0.0.1:8080/mcp",
      "tools": ["*"]
    }
  }
}

每个Copilot或其他代理会话都可以使用相同的进程。C#二进制文件 接受相同的传输、地址和端口选项。C#使用ASP。NET核心 AllowedHosts 配置;Go使用 --allowed-hosts.

HTTP传输是无状态的。它包括主机报头和跨源防御, 但确实如此 不 添加应用程序身份验证。不要公开曝光 无需经过身份验证的反向代理或专用网络。

看 运行一个共享服务 对于幂等性 start/status/stop/update命令和从每个会话STDIO迁移。

MCP工具

工具 目的
analyze_page 使用PSI分析一个URL
analyze_pages 分析多达10个具有有限并发性的URL
get_crux_data 查询当前CrUX数据以获取URL或来源
get_crux_history 最多查询40个CrUX历史周期

analyze_page

参数 类型 必填 默认
url string 是 -
strategy string 否 both
categories string[] 否 性能、SEO、可访问性、最佳实践
locale string 否 PSI默认值

有效的策略是 mobile, desktop,以及 both。有效类别为 performance, seo, accessibility, best-practices,以及 agentic-browsing.

代理浏览是实验性的,永远不会隐式包含。

analyze_pages

接受与相同的控件 analyze_page,与 urls 替换 url. 批处理限制为10个URL和4个并发PSI请求。瞬态 网络、HTTP 429和HTTP 5xx故障最多重试三次。

结果包含确定性 results 和 errors 数组因此失败 URL不会丢弃成功的分析。

PSI响应模型

{
  "results": [
    {
      "metadata": {
        "inputUrl": "https://example.com/",
        "strategy": "mobile",
        "lighthouseVersion": "13.4.0",
        "requestedUrl": "https://example.com/",
        "finalUrl": "https://www.example.com/"
      },
      "fieldData": {
        "page": {
          "overallRating": "needs-improvement",
          "originFallback": false,
          "metrics": {
            "lcp": {
              "id": "LARGEST_CONTENTFUL_PAINT_MS",
              "percentile": 75,
              "value": 3100,
              "unit": "ms",
              "rating": "needs-improvement",
              "distributions": []
            },
            "inp": {
              "id": "INTERACTION_TO_NEXT_PAINT",
              "percentile": 75,
              "value": 240,
              "unit": "ms",
              "rating": "needs-improvement",
              "distributions": []
            }
          }
        }
      },
      "labData": {
        "categories": {
          "performance": {
            "id": "performance",
            "title": "Performance",
            "score": 0.82,
            "scoreDisplayMode": "gauge"
          }
        },
        "metrics": {},
        "insights": [
          {
            "id": "render-blocking-insight",
            "title": "Render-blocking requests",
            "metricSavings": {
              "LCP": 710
            },
            "details": {
              "type": "table",
              "items": []
            }
          }
        ],
        "diagnostics": [],
        "unscoredAudits": [],
        "passedAuditIds": [],
        "notApplicableAuditIds": [],
        "manualAuditIds": [],
        "entities": []
      }
    }
  ],
  "errors": []
}

现场评级来自谷歌的CrUX类别。实验室指标保留Lighthouse 分数和单位;服务器不会将合成指标误标记为真实用户 核心网络生命。

get_crux_data

参数 类型 必填 默认
target string 是 -
target_type string 否 url
form_factor string 否 all
metrics string[] 否 全部可用

target_type 是 url 或 origin. form_factor 是 all, phone, tablet, 或 desktop.

get_crux_history

接受相同的输入 collection_period_count从1到40,以及 默认为25。不可用的句点以JSON格式返回 null,从来没有 NaN.

建筑物

cd go
go test ./...
golangci-lint run
go build -ldflags="-s -w -X main.version=dev" -trimpath -o psi-mcp-go .
cd csharp
dotnet test PageSpeedMcp.slnx -c Release
dotnet publish src/PageSpeedMcp/PageSpeedMcp.csproj \
  -r linux-x64 -c Release --self-contained true

相关项目

关于

由...建造 尼克·科森蒂诺 (开发负责人)。

贡献

  1. 在提交功能之前打开一个问题。
  2. 保持Go和C#的行为对等。
  3. 运行Go-lint/tests、C#build/tests和严格的文档构建。

许可证

MIT许可证-请参阅 许可证.