关于 Star Wars API & MCP server (swapi.build)
Star Wars API & MCP server (swapi.build) 提供《星球大战》人物、电影、星球、物种、飞船和载具数据,面向应用开发、演示和数据查询场景。它同时提供 REST API 与无需认证的只读远程 MCP 服务。
主要功能
- 01提供六类《星球大战》数据
- 02支持列表、按 ID 查询与随机记录
- 03支持名称或标题搜索
- 04提供 JSON REST API
- 05提供 OpenAPI 契约
适用场景
- 01在应用中查询《星球大战》实体数据
- 02为演示或原型提供稳定的数据源
- 03通过 MCP 客户端搜索或读取记录
MCP 相关
它通过 Streamable HTTP 暴露只读 MCP 工具,可列出、获取、随机选择和搜索六类数据;无需认证。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://swapi.build/mcpclaude mcp add --transport http build-swapi-star-wars https://swapi.build/mcp{"mcpServers":{"build-swapi-star-wars":{"type":"http","url":"https://swapi.build/mcp"}}}在 Cursor 中打开{"servers":{"build-swapi-star-wars":{"type":"http","url":"https://swapi.build/mcp"}}}在 VS Code 中打开{"mcpServers":{"build-swapi-star-wars":{"type":"http","url":"https://swapi.build/mcp"}}}{"mcpServers":{"build-swapi-star-wars":{"serverUrl":"https://swapi.build/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
4| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | integer | 是 | 数字记录 ID(来自实体的 url 字段) |
| resource | enum | 是 | 资源类型PEOPLE | FILMS | PLANETS | SPECIES | STARSHIPS | VEHICLES |
详细介绍
SWAPI.build
一个免费、开源的 Star Wars API,提供人物、电影、星球、物种、星际飞船和载具的数据。基于 Quarkus 和 GraalVM 构建,具备即时启动、极低内存占用和开箱即用的高性能。
本项目受到最初的 SWAPI(由 Paul Hallett 创建,由 Juriy Bura 维护)启发,旨在解决 Star Wars API 永不离线的需求。如果你曾因第三方 API 宕机而导致线上演示中断,就会明白本项目存在的意义。
快速开始
前置条件: Java 25 和 Maven(或使用随附的 Maven Wrapper)。
cd swapi-app
./mvnw quarkus:dev
API 和前端将在 http://localhost:5432 上提供服务。
API 端点
基础路径:/api
| 资源 | 列出全部 | 按 ID 查询 | 随机 | 搜索 |
|---|---|---|---|---|
| 人物 | GET /api/people | GET /api/people/:id | GET /api/people/random | GET /api/people?search=name |
| 电影 | GET /api/films | GET /api/films/:id | GET /api/films/random | GET /api/films?search=title |
| 星球 | GET /api/planets | GET /api/planets/:id | GET /api/planets/random | GET /api/planets?search=name |
| 物种 | GET /api/species | GET /api/species/:id | GET /api/species/random | GET /api/species?search=name |
| 星际飞船 | GET /api/starships | GET /api/starships/:id | GET /api/starships/random | GET /api/starships?search=name |
| 载具 | GET /api/vehicles | GET /api/vehicles/:id | GET /api/vehicles/random | GET /api/vehicles?search=name |
ID 是各实体 url 字段中的记录 ID(对于电影,1 = A New Hope)。
成功响应返回 200;未知或非数字 ID 返回 404。
GET /api/stats 返回过去 24 小时(?period=24h,按小时)、7 天(默认,按天;
使用 &granularity=hour 按小时统计)或 30 天(?period=30d,按天)的匿名请求计数,按路由(例如
/api/people/{id} 或 /mcp)和分组(REST API、MCP、页面、SEO、其他)统计;同时提供之前同等时间窗口的数据以供比较,并在 performance 中提供按路由和分组统计的服务端响应时间(请求数、平均值、最小值、最大值、标准差,以及以毫秒为单位的近似 p50/p95/p99,不包括网络耗时)。统计时不记录 IP 地址或客户端详情。/stats 页面展示相同的数据,并提供筛选器、趋势图、排名和性能部分。
所有响应均为 JSON。示例:
curl http://localhost:5432/api/people/1
OpenAPI
完整的 API 契约位于 /openapi.json
(OpenAPI 3.x,根据代码生成,始终保持同步)。文档页面 根据该契约呈现内容,并为每个端点提供“试用”功能。例如,可使用以下命令生成客户端:
npx @openapitools/openapi-generator-cli generate -i https://swapi.build/openapi.json -g typescript-fetch
MCP 服务
swapi.build 也是一个基于 Streamable HTTP 的远程 MCP 服务。任何 Streamable HTTP 客户端都可以使用:无状态的 2026-07-28 修订版会发送独立完整的请求,较早的修订版则通过 initialize 协商会话——两者由同一端点提供服务。不支持旧版 HTTP+SSE 传输(2024-11-05)。官方提供,只读,无需身份验证:
https://swapi.build/mcp
完整设置指南:swapi.build/docs/mcp
| 工具 | 参数 | 返回内容 |
|---|---|---|
sw_list | resource | 某类资源的所有实体 |
sw_get | resource、id | 按 id 获取一个实体 |
sw_random | resource | 一个随机实体 |
sw_search | resource、query | 名称/标题子字符串匹配结果 |
resource 的值为 PEOPLE、FILMS、PLANETS、SPECIES、STARSHIPS、VEHICLES 之一。
Id 是每个实体 url 字段中的记录 id(对于 FILMS,1 = A New Hope)。
缓存: Quarkiverse MCP Server 2.0.0 会在无状态发现和工具列表响应中发送必需的 ttlMs: 0 和 cacheScope: "public" 字段。TTL 为零表示立即过期;未配置正数的有效期。
其缓存提示
适用于发现、列表方法和 resources/read,不适用于 tools/call。
此处的 Star Wars 数据通过工具公开,因此不会启用工具结果缓存,包括 sw_random。REST/边缘缓存是单独的机制。
Claude Code
claude mcp add --transport http swapi-build https://swapi.build/mcp
或者在仓库根目录通过 .mcp.json 共享:
{
"mcpServers": {
"swapi-build": { "type": "http", "url": "https://swapi.build/mcp" }
}
}
验证:claude mcp list → swapi-build ✔ Connected。
Claude Desktop & claude.ai
Settings → Connectors → Add custom connector → 名称 swapi-build,URL
https://swapi.build/mcp。无需身份验证。在任意聊天中通过 + 菜单 → Connectors 验证。
OpenAI Codex
codex mcp add swapi-build --url https://swapi.build/mcp
或者在 ~/.codex/config.toml 中配置(CLI、IDE 扩展和 ChatGPT 桌面版共用):
[mcp_servers.swapi-build]
url = "https://swapi.build/mcp"
验证:codex mcp list。
GitHub Copilot (VS Code)
.vscode/mcp.json(顶层键为 servers):
{
"servers": {
"swapi-build": { "type": "http", "url": "https://swapi.build/mcp" }
}
}
或者打开命令面板 → MCP: Add Server。通过 Copilot Chat 中的 Configure Tools 按钮验证。 对于 Business/Enterprise,必须启用“MCP servers in Copilot”组织策略。
IBM Bob
~/.bob/settings/mcp_settings.json(全局)或 .bob/mcp.json(项目):
{
"mcpServers": {
"swapi-build": {
"type": "streamable-http",
"url": "https://swapi.build/mcp",
"disabled": false
}
}
}
或者打开 Bob 面板 → MCP 标签页 → Edit Global MCP。Bob 会自动检测工具。
服务在空闲时会缩容至零——如果首次连接尝试失败,请重试一次 (原生二进制会在几十毫秒内启动;平台可能需要更长时间来配置容器;后续调用很快,无论客户端使用无状态还是基于会话的方式)。
浏览器中的 WebMCP(实验性)
网站通过 WebMCP 提供 sw_list、sw_get、sw_search 和 sw_random。
工具名称和参数与远程 MCP 工具一致,包括大写的资源名称。每个浏览器工具都会更新可见的浏览器,并在 JSON 结果中返回完整记录,其中包含 ok、data、resource 和 path。
浏览器结果封装与远程 MCP 传输不同。
请使用启用了 WebMCP 且支持 document.modelContext
API 的兼容浏览器。设置与演示指南
介绍了检查器、示例调用和取消行为。API 不可用时,网站仍可正常使用。网站中未嵌入模型 API 密钥或 AI 运行时。JavaScript 由 Quinoa 打包并在浏览器中运行,包括通过 Quarkus 原生可执行文件提供服务时。
客户端示例
examples/java/langchain4j-mcp-client— 使用自然语言提问;工具来自上文的 MCP 服务,因此此示例未定义任何工具。examples/java/quarkus-rest-client— 使用类型化客户端从 Java 调用 REST API。
项目结构
swapi-app/
src/main/
java/com/eldermoraes/ # Backend (Quarkus + Jakarta REST)
film/ # Film model, service, resource
people/ # People model, service, resource
planet/ # Planet model, service, resource
specie/ # Specie model, service, resource
starship/ # Starship model, service, resource
vehicle/ # Vehicle model, service, resource
mcp/ # MCP server tools (sw_list, sw_get, sw_random, sw_search)
SWObject.java # Base model class
SWService.java # Service interface
ApiResource.java # Root /api endpoint
ApplicationPath.java # Jakarta REST base path (/api)
resources/
data/ # Static JSON data files
application.properties # Quarkus configuration
webui/ # Frontend (TypeScript + Vite)
src/
api.ts # API client with request management
main.ts # SPA router
pages/ # Page renderers (home, resource, docs, mcp, about, privacy, terms)
json-highlight.ts # JSON syntax highlighting for result panels
style.css # Site styles
types.ts # TypeScript interfaces for API resources
constants.ts # Shared resource metadata
utils.ts # Shared utilities (escapeHtml)
src/test/
java/com/eldermoraes/ # Regression suite (REST contracts, MCP tools, forwarded headers)
每个后端领域(电影、人物、星球等)都遵循相同的模式:
- 模型(例如,
Film.java):带有@RegisterForReflection的 POJO,用于支持原生镜像 - 服务(例如,
FilmService.java):启动时从 JSON 加载数据,并缓存在内存中 - 资源(例如,
FilmResource.java):带有@RunOnVirtualThread的 Jakarta REST 控制器
构建
cd swapi-app
# Development mode (live reload)
./mvnw quarkus:dev
# Production JAR
./mvnw package
java -jar target/quarkus-app/quarkus-run.jar
# Native executable (requires GraalVM or container build)
./mvnw package -Dnative
./mvnw package -Dnative -Dquarkus.native.container-build=true
前端由 Quinoa 在 Maven 构建期间自动构建并打包。无需单独运行 npm。
部署
应用以原生(GraalVM/Mandrel)可执行文件的形式运行在 Oracle Cloud 上的可自托管服务器中,由 systemd 管理,并运行在 Caddy 后方(通过 Let's Encrypt 提供 TLS)。DNS 由 Cloudflare 管理(仅 DNS 记录指向该服务器)。发布 GitHub Release 会运行 .github/workflows/native-binary.yml:测试套件、构建原生可执行文件并附加到 Release、人工审批,然后通过 SSH 安装到服务器并执行生产环境探测。操作手册见 docs/DEPLOY.md。
技术栈
- 运行时: Java 25 上的 Quarkus 3.33,使用虚拟线程
- MCP 服务: Quarkiverse MCP Server — Streamable HTTP,支持无状态和基于会话的客户端
- 序列化: Jakarta REST + JSON-B
- 原生镜像: 通过 Mandrel 构建器使用 GraalVM
- 前端: TypeScript + Vite,由 Quinoa 提供服务
贡献
我们随时欢迎拉取请求。无论是修复错误、改进文档,还是添加新功能,都欢迎加入,共同打造银河系中最棒的 Star Wars API。
- Fork 此仓库
- 创建功能分支(
git checkout -b feature/my-change) - 进行更改(并添加测试),然后运行测试套件:
cd swapi-app && ./mvnw test - 提交并推送
- 发起 Pull Request
更新日志和发布
发布历史记录见 CHANGELOG.md。带标签的版本位于
Releases 页面。/openapi.json 中提供的版本(info.version)始终是最新发布的版本。
发布流程详见 docs/RELEASE.md。
致谢
- 原版 SWAPI 由 Paul Hallett 创建,现由 Juriy Bura 维护
- Star Wars 数据来自 Wookieepedia 等社区协作来源
- 所有 Star Wars 内容和图片均为 Lucasfilm Ltd. 和 Disney 的财产。本项目与 Lucasfilm 或 Disney 无关,也未获其认可。
许可证
本项目采用 Apache License 2.0 许可。网站还发布了隐私政策和使用条款。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。