Evernight MCP 服务
可用工具 (12 个)
该服务在 MCP 协议中暴露的工具,AI 可按需调用
maven_artifact_detail 3 个参数 需填 2 项
查询 Maven Artifact 详情,包括最新版本、打包类型、POM 描述、许可证、SCM 和开发者信息。repositoryBaseUrl 可选,传入时必须是 Maven 仓库白名单中的镜像地址。
必填参数:groupId、artifactId
pypi_release_files 3 个参数 需填 1 项
查询 PyPI 指定 release 的文件列表,包括 wheel/sdist 文件名、Python tag、大小、上传时间、哈希和 yanked 状态。version 可选,留空时使用最新版本。repositoryBaseUrl 可选,传入时必须是 PyPI 仓库白名单中的镜像地址。
必填参数:packageName
pypi_package_info 3 个参数 需填 1 项
查询 PyPI 包元数据,包括最新版本、Python 版本要求、许可证、项目链接、分类器和版本摘要。repositoryBaseUrl 可选,传入时必须是 PyPI 仓库白名单中的镜像地址。
必填参数:packageName
osv_vulnerability_lookup 3 个参数 需填 2 项
通过 OSV 查询 Maven、npm、PyPI 包的已知漏洞,版本可选。
必填参数:ecosystem、packageName
maven_artifact_java_version 4 个参数 需填 2 项
只读取指定 Maven Artifact POM 中声明的 Java 版本字段,包括 maven.compiler.release/source/target、maven-compiler-plugin 和 maven-enforcer-plugin。注意:这些字段表示“目标兼容版本”或“要求的 Java 版本”,不一定是实际执行编译的 JDK。version 可选,留空时查询最新版本。repositoryBaseUrl 可选,传入时必须是 Maven 仓库白名单中的镜像地址。
必填参数:groupId、artifactId
maven_artifact_search 5 个参数
搜索 Maven Artifact 坐标,支持关键词、groupId、artifactId 组合查询。
该工具无需必填参数,直接调用即可
maven_dependency_detail 4 个参数 需填 3 项
查询指定 Maven 坐标和版本的 POM 依赖详情,包括 parent、dependencies 和 dependencyManagement。repositoryBaseUrl 可选,传入时必须是 Maven 仓库白名单中的镜像地址。
必填参数:groupId、artifactId、version
maven_latest_version 3 个参数 需填 2 项
根据 groupId 和 artifactId 查询 Maven 仓库中的最新版本。repositoryBaseUrl 可选,传入时必须是 Maven 仓库白名单中的镜像地址。
必填参数:groupId、artifactId
maven_version_list 3 个参数 需填 2 项
根据 groupId 和 artifactId 查询 Maven 仓库中的全部版本列表。repositoryBaseUrl 可选,传入时必须是 Maven 仓库白名单中的镜像地址。
必填参数:groupId、artifactId
osv_batch_vulnerability_lookup 1 个参数 需填 1 项
批量查询 Maven、npm、PyPI 包的 OSV 已知漏洞;最多 50 个包。
必填参数:packages
npm_package_version_detail 3 个参数 需填 1 项
查询 npm 指定版本元数据,包括依赖、peerDependencies、engines、bin、deprecated 和 tarball 信息。version 可选,留空时使用 latest。registryBaseUrl 可选,传入时必须是 npm registry 白名单中的镜像地址。
必填参数:packageName
npm_package_info 3 个参数 需填 1 项
查询 npm 包元数据,包括 latest、dist-tags、许可证、仓库、依赖和版本摘要。registryBaseUrl 可选,传入时必须是 npm registry 白名单中的镜像地址。
必填参数:packageName
服务介绍
简介
Evernight 是一个基于 Spring AI MCP Server WebMVC 的 streamable HTTP MCP 服务。它把 Maven、npm、PyPI 和 OSV 的常用查询封装成结构化 MCP 工具,适合在 vibe coding、依赖升级、漏洞排查和自动化研发工作流中使用。
服务默认暴露:
- MCP endpoint:
/mcp - 工具首页:
/ - 当前镜像白名单:
/api/repositories - 健康检查:
/actuator/health
公共服务
{
"mcpServers": {
"evernight": {
"url": "https://suhoan-evernight.ms.show/mcp"
}
}
}
功能特性
- 支持 Maven、npm、PyPI 包信息查询。
- 支持 OSV 已知漏洞查询。
- Maven、npm、PyPI 镜像地址均通过白名单校验,降低 SSRF 风险。
- 使用 Caffeine 缓存上游查询结果,可按生态配置 TTL。
- 支持 HTTP/HTTPS/SOCKS5 代理访问上游服务。
- 支持按客户端 IP 限流。
- 提供统一错误响应,便于智能体稳定处理失败。
- 内置静态首页,展示工具目录、参数、示例、服务状态和镜像白名单。
工具列表
| 工具 | 说明 |
|---|---|
maven_latest_version |
根据 groupId 和 artifactId 查询 Maven 仓库最新版本。 |
maven_version_list |
查询 Maven 仓库中的完整版本列表。 |
maven_artifact_search |
搜索 Maven Artifact;非 Maven Central 镜像仅支持 groupId + artifactId 精确查询。 |
maven_artifact_detail |
查询 Maven Artifact 详情,包括 POM 描述、许可证、SCM 和开发者信息。 |
maven_dependency_detail |
查询指定 Maven 坐标和版本的 POM 依赖详情,包括 parent、dependencies 和 dependencyManagement。 |
maven_artifact_java_version |
只读取 Maven Artifact POM 中声明的 Java 版本字段;这些字段表示“目标兼容版本”或“要求的 Java 版本”,不一定是实际执行编译的 JDK。 |
npm_package_info |
查询 npm 包元数据,包括 latest、dist-tags、许可证、仓库、依赖和版本摘要。 |
npm_package_version_detail |
查询 npm 指定版本元数据,包括依赖、peerDependencies、engines、bin、deprecated 和 tarball 信息。 |
pypi_package_info |
查询 PyPI 包元数据,包括最新版本、Python 版本要求、许可证、项目链接和 release 摘要。 |
pypi_release_files |
查询 PyPI 指定 release 的 wheel/sdist 文件、哈希、大小、上传时间和 yanked 状态。 |
osv_vulnerability_lookup |
通过 OSV 查询 Maven、npm、PyPI 包的已知漏洞。 |
osv_batch_vulnerability_lookup |
批量查询 Maven、npm、PyPI 包的 OSV 已知漏洞,最多 50 个包。 |
快速开始
环境要求:
- JDK 25+
- Maven 3.9+
本地运行:
$env:JAVA_HOME='D:\devProgram\jdk\jdk-26'
$env:Path='D:\devProgram\jdk\jdk-26\bin;D:\devProgram\apache-maven-3.9.6\bin;' + $env:Path
D:\devProgram\apache-maven-3.9.6\bin\mvn.cmd '-Dmaven.repo.local=D:\jarLibrary' spring-boot:run
访问:
- 首页:
http://localhost:25924/ - MCP:
http://localhost:25924/mcp - 健康检查:
http://localhost:25924/actuator/health
Docker Compose
项目包含从源码构建的 Dockerfile 和 docker-compose.yml。
docker compose up --build -d
查看状态:
docker compose ps
curl http://localhost:25924/actuator/health
停止服务:
docker compose down
配置
镜像白名单
工具入参中的 repositoryBaseUrl 或 registryBaseUrl 都是可选参数。传入时必须是对应生态白名单中的完整镜像地址;不传时使用逗号分隔列表中的第一个地址作为默认镜像。
常用环境变量
| 变量名 | 默认值 | 说明 |
|---|---|---|
SERVER_PORT |
25924 |
HTTP 服务端口。 |
MAVEN_REPOSITORY_REPOSITORIES |
https://repo1.maven.org/maven2,https://maven.aliyun.com/repository/public |
Maven 仓库白名单,逗号分隔,第一项为默认仓库。 |
NPM_REGISTRY_REPOSITORIES |
https://registry.npmjs.org,https://registry.npmmirror.com |
npm registry 白名单,逗号分隔,第一项为默认 registry。 |
PYPI_REPOSITORY_REPOSITORIES |
https://pypi.org/pypi,https://pypi.tuna.tsinghua.edu.cn/pypi |
PyPI JSON API 白名单,逗号分隔,第一项为默认仓库。 |
EVERNIGHT_HTTP_PROXY_URL |
空 | 上游代理地址,支持 http://127.0.0.1:7890、https://127.0.0.1:7890、socks5://127.0.0.1:1080。 |
EVERNIGHT_HTTP_CONNECT_TIMEOUT_MILLIS |
5000 |
上游 HTTP 连接超时时间,单位毫秒。 |
EVERNIGHT_HTTP_READ_TIMEOUT_MILLIS |
10000 |
上游 HTTP 读取超时时间,单位毫秒。 |
EVERNIGHT_RATE_LIMIT_ENABLED |
true |
是否启用 IP 限流。 |
EVERNIGHT_RATE_LIMIT_CLIENT_IP_HEADER |
X-Evernight-Client-IP |
CDN 或网关注入的真实客户端 IP 请求头。 |
EVERNIGHT_RATE_LIMIT_MAX_REQUESTS |
120 |
每个客户端 IP 在限流窗口内允许的最大请求数。 |
EVERNIGHT_RATE_LIMIT_WINDOW_SECONDS |
60 |
限流窗口长度,单位秒。 |
EVERNIGHT_ONLINE_USERS_ENABLED |
true |
是否启用在线人数统计。 |
EVERNIGHT_ONLINE_USERS_WINDOW_SECONDS |
300 |
在线人数活跃窗口长度,单位秒。 |
EVERNIGHT_ONLINE_USERS_MAXIMUM_SIZE |
100000 |
在线人数统计最多保留的客户端标识数量。 |
EVERNIGHT_CACHE_ENABLED |
true |
是否启用上游查询缓存。 |
EVERNIGHT_CACHE_MAXIMUM_SIZE |
10000 |
查询缓存最大条目数。 |
HTTP 代理
evernight:
http:
proxy-url: # http://127.0.0.1:7890, https://127.0.0.1:7890, socks5://127.0.0.1:1080
connect-timeout-millis: 5000
read-timeout-millis: 10000
缓存
evernight:
cache:
enabled: true
maximum-size: 10000
maven-ttl-seconds: 21600
npm-ttl-seconds: 21600
pypi-ttl-seconds: 21600
osv-ttl-seconds: 3600
IP 限流
evernight:
rate-limit:
enabled: true
client-ip-header: X-Evernight-Client-IP
max-requests: 120
window-seconds: 60
客户端 IP 解析优先级:client-ip-header 配置的请求头、X-Forwarded-For、X-Real-IP、remoteAddr。首页、静态资源、首页支撑接口和健康检查不会参与限流。
在线人数
在线人数按最近窗口内有请求的唯一客户端 IP 统计。首页、静态资源、首页支撑接口和 /actuator/* 健康检查请求不会计入人数;首页在服务健康状态为 UP 时会显示在线人数。
evernight:
online-users:
enabled: true
window-seconds: 300
maximum-size: 100000
测试
$env:JAVA_HOME='D:\devProgram\jdk\jdk-26'
$env:Path='D:\devProgram\jdk\jdk-26\bin;D:\devProgram\apache-maven-3.9.6\bin;' + $env:Path
D:\devProgram\apache-maven-3.9.6\bin\mvn.cmd '-Dmaven.repo.local=D:\jarLibrary' test
许可证
Evernight 使用 Apache License 2.0 开源协议。