npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

sls-log-mcp-worker

v0.1.2

Published

MCP server for querying Aliyun SLS logs over Cloudflare Worker or stdio.

Downloads

445

Readme

SLS Log MCP

一个最小可用的 MCP Server,用于查询阿里云 SLS 日志。支持两种运行方式:

  • Cloudflare Worker:适合部署成远程 MCP HTTP 服务。
  • stdio:适合本地 MCP 客户端通过 npx 或全局命令直接启动。

能力

只提供一个通用工具:

  • query_logs:按 SLS projectlogstoreGetLogs 查询参数查询日志。默认返回 CSV 文本。

这个 MCP 不内置业务环境概念。prodbetatestapiworker 这类映射应由调用方或 Agent 提示词维护,而不是写死在工具参数里。

阿里云 AK/SK 不写死在代码里。Worker 模式通过请求 Header 传入,stdio 模式通过环境变量传入。SLS Endpoint 是工具参数,由调用 query_logs 时传入。

query_logs 参数

| 参数 | 必填 | 说明 | 默认 | | --- | --- | --- | --- | | sls_endpoint | 是 | SLS 公网 Endpoint,例如 cn-hangzhou.log.aliyuncs.com。不要带 https:// | 无 | | project | 是 | SLS Project 名称,例如 evose-private-prod | 无 | | logstore | 是 | SLS LogStore 名称,例如 api | 无 | | start_time | 否 | 查询开始时间。支持 Unix 秒、ISO 时间、YYYY-MM-DD HH:mm:ss | 最近 15 分钟 | | end_time | 否 | 查询结束时间。支持 Unix 秒、ISO 时间、YYYY-MM-DD HH:mm:ss | 当前时间 | | query | 否 | SLS 查询语句,支持原生 SLS 查询语法 | * | | limit | 否 | 返回条数,范围 0-100000 | 20 | | offset | 否 | 分页偏移 | 0 | | page_size | 否 | 每次请求 SLS 的条数,范围 1-100;查询容易超时时调小 | 20 | | max_field_length | 否 | 单个字符串字段最大返回字符数,范围 0-20000;0 表示不截断 | 2000 | | sort_order | 否 | 排序方向:descasc | desc | | topic | 否 | SLS topic | 空字符串 | | response_format | 否 | 返回格式:csvjson。默认 CSV;传 json 时返回完整查询元数据和 logs | csv |

内置限制:

  • 默认查最近 15 分钟。
  • 默认返回 CSV 文本。
  • 默认返回 20 条。
  • 最多返回 100000 条。
  • 默认每次向 SLS 拉 20 条,降低单次查询超时概率。
  • 默认截断单个超长字段,避免 MCP 响应体过大。
  • 大于 page_size 时,Worker 内部自动分页拉取。
  • 无日志时,CSV 返回空字符串。

真正的查询范围由 RAM 权限控制。传入的 AK/SK 只能查哪些 Project,这个 MCP 就只能查哪些 Project。

Cloudflare Worker 在公网运行,sls_endpoint 不能使用阿里云内网地址,所以不要传 *-intranet.log.aliyuncs.com

配置

Worker 侧只保留查询限制参数:

DEFAULT_QUERY_SECONDS = "900"
DEFAULT_QUERY_LIMIT = "20"
DEFAULT_PAGE_SIZE = "20"
MAX_QUERY_LIMIT = "100000"
MAX_FIELD_LENGTH = "2000"

stdio 模式

安装后运行:

npm install -g sls-log-mcp-worker
sls-log-mcp

也可以直接用 npx

npx -y sls-log-mcp-worker

stdio 模式通过环境变量读取阿里云凭证:

| 环境变量 | 必填 | 说明 | | --- | --- | --- | | ALIYUN_ACCESS_KEY_ID | 是 | 阿里云 RAM 用户 AccessKey ID | | ALIYUN_ACCESS_KEY_SECRET | 是 | 阿里云 RAM 用户 AccessKey Secret |

同时兼容 ALICLOUD_ACCESS_KEY_IDALICLOUD_ACCESS_KEY_SECRETALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

可选环境变量:

| 环境变量 | 默认 | 说明 | | --- | --- | --- | | SLS_MCP_DEFAULT_QUERY_SECONDS | 900 | 不传 start_time 时默认查询最近多少秒 | | SLS_MCP_DEFAULT_QUERY_LIMIT | 20 | 默认返回条数 | | SLS_MCP_DEFAULT_PAGE_SIZE | 20 | 每次请求 SLS 的条数 | | SLS_MCP_MAX_QUERY_LIMIT | 100000 | 最大返回条数 | | SLS_MCP_MAX_FIELD_LENGTH | 2000 | 单个字符串字段最大返回字符数,0 表示不截断 | | SLS_MCP_DEFAULT_TIMEZONE_OFFSET | +08:00 | 解析无时区时间字符串时使用的默认时区 |

MCP 客户端配置示例:

{
  "mcpServers": {
    "sls-log": {
      "command": "npx",
      "args": ["-y", "sls-log-mcp-worker"],
      "env": {
        "ALIYUN_ACCESS_KEY_ID": "<ALIYUN_ACCESS_KEY_ID>",
        "ALIYUN_ACCESS_KEY_SECRET": "<ALIYUN_ACCESS_KEY_SECRET>"
      }
    }
  }
}

Worker 模式 Header

每次使用 MCP 时传这些 Header:

| Header | 必填 | 说明 | | --- | --- | --- | | x-aliyun-access-key-id | 是 | 阿里云 RAM 用户 AccessKey ID | | x-aliyun-access-key-secret | 是 | 阿里云 RAM 用户 AccessKey Secret |

本地开发 Worker

npm install
npm run dev

本地验证 stdio

npm run build
ALIYUN_ACCESS_KEY_ID=<ALIYUN_ACCESS_KEY_ID> \
ALIYUN_ACCESS_KEY_SECRET=<ALIYUN_ACCESS_KEY_SECRET> \
node dist/stdio.js

部署到 Cloudflare Worker

npm install
npm run deploy

发布到 npm

发布由 GitHub Actions 自动完成。仓库推送形如 v0.1.0 的 tag 后,workflow 会执行类型检查、构建,并发布到 npm。

推荐使用 npm Trusted Publishing,不需要在 GitHub 配置 NPM_TOKEN。npm 会通过 OIDC 信任指定的 GitHub 仓库和 workflow。

前提:

  • npm 包必须已经存在。首次发布包时,仍需要手动 npm publish --access public,或临时使用 token 发布一次。
  • npm 账号需要开启 2FA。

首次发布后,在 npm 配置 Trusted Publisher:

  1. 打开 npm 包页面的 Settings
  2. 找到 Trusted Publisher
  3. 选择 GitHub Actions
  4. 填写:
    • Organization or user:leezee7
    • Repository:sls-log-mcp-worker
    • Workflow filename:publish-npm.yml
    • Allowed actions:勾选 npm publish

也可以用 npm CLI 配置:

npm install -g npm@latest
npm trust github sls-log-mcp-worker \
  --repo leezee7/sls-log-mcp-worker \
  --file publish-npm.yml \
  --allow-publish

发版步骤:

npm version patch --no-git-tag-version
git add package.json package-lock.json
git commit -m "Release 0.1.1"
git push origin main
git tag v0.1.1
git push origin v0.1.1

要求:

  • tag 必须以 v 开头,例如 v0.1.1
  • tag 去掉 v 后必须等于 package.json 里的 version
  • 不要把 npm token 写进代码、README 或 workflow 文件。

RAM 最小查询权限

${ACCOUNT_ID} 替换成阿里云账号 ID。示例:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["log:GetLogStoreLogs"],
      "Resource": [
        "acs:log:*:${ACCOUNT_ID}:project/evose-private-prod",
        "acs:log:*:${ACCOUNT_ID}:project/evose-private-beta",
        "acs:log:*:${ACCOUNT_ID}:project/evose-private-test"
      ]
    }
  ]
}

如果只允许查某些 LogStore,可以进一步收窄到:

"acs:log:*:${ACCOUNT_ID}:project/evose-private-prod/logstore/api"

MCP 调用示例

健康检查:

curl https://<worker-domain>/health

初始化:

curl https://<worker-domain>/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -H 'x-aliyun-access-key-id: <ALIYUN_ACCESS_KEY_ID>' \
  -H 'x-aliyun-access-key-secret: <ALIYUN_ACCESS_KEY_SECRET>' \
  --data '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-06-18",
      "capabilities": {},
      "clientInfo": {
        "name": "curl",
        "version": "0.1.0"
      }
    }
  }'

列出工具:

curl https://<worker-domain>/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -H 'x-aliyun-access-key-id: <ALIYUN_ACCESS_KEY_ID>' \
  -H 'x-aliyun-access-key-secret: <ALIYUN_ACCESS_KEY_SECRET>' \
  --data '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list",
    "params": {}
  }'

查询最近 15 分钟 API 错误日志:

curl https://<worker-domain>/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -H 'x-aliyun-access-key-id: <ALIYUN_ACCESS_KEY_ID>' \
  -H 'x-aliyun-access-key-secret: <ALIYUN_ACCESS_KEY_SECRET>' \
  --data '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "query_logs",
      "arguments": {
        "sls_endpoint": "cn-hangzhou.log.aliyuncs.com",
        "project": "evose-private-prod",
        "logstore": "api",
        "query": "level: ERROR",
        "limit": 20
      }
    }
  }'

按关键词查 worker 日志:

curl https://<worker-domain>/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -H 'x-aliyun-access-key-id: <ALIYUN_ACCESS_KEY_ID>' \
  -H 'x-aliyun-access-key-secret: <ALIYUN_ACCESS_KEY_SECRET>' \
  --data '{
    "jsonrpc": "2.0",
    "id": 4,
    "method": "tools/call",
    "params": {
      "name": "query_logs",
      "arguments": {
        "sls_endpoint": "cn-hangzhou.log.aliyuncs.com",
        "project": "evose-private-beta",
        "logstore": "worker",
        "start_time": "2026-06-13 16:00:00",
        "end_time": "2026-06-13 17:00:00",
        "query": "\"notify_delivery\"",
        "limit": 50,
        "page_size": 20
      }
    }
  }'

Evose 接入

Worker MCP URL:

https://<worker-domain>/mcp

stdio 模式的 MCP 服务配置:

{
  "command": "npx",
  "args": ["-y", "sls-log-mcp-worker"],
  "env": {
    "ALIYUN_ACCESS_KEY_ID": "<ALIYUN_ACCESS_KEY_ID>",
    "ALIYUN_ACCESS_KEY_SECRET": "<ALIYUN_ACCESS_KEY_SECRET>"
  }
}

阿里云 Header:

x-aliyun-access-key-id: <ALIYUN_ACCESS_KEY_ID>
x-aliyun-access-key-secret: <ALIYUN_ACCESS_KEY_SECRET>

工具参数里传:

{
  "sls_endpoint": "cn-hangzhou.log.aliyuncs.com",
  "project": "evose-private-prod",
  "logstore": "api",
  "query": "*",
  "limit": 20
}