关于 InkQuest
InkQuest 是一个互动式语言学习小说项目,提供公开故事目录的只读 MCP 接口。MCP 客户端可浏览免费故事、读取开篇并获取 HSK 推荐,但不能访问生成故事或付费场景。
主要功能
- 01浏览免费故事目录
- 02获取故事开篇场景
- 03按匹配度推荐故事
- 04为结果提供故事链接
适用场景
- 01查找适合练习阅读的免费故事
- 02查看故事开篇后选择阅读
- 03按 HSK 推荐筛选学习内容
MCP 相关
InkQuest 在 `/api/mcp` 提供只读 Streamable HTTP MCP 服务,列出免费故事、返回开篇场景并推荐匹配内容。生成故事和付费场景不对该接口开放。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://inkquest.dev/api/mcpclaude mcp add --transport http dev-inkquest-inkquest https://inkquest.dev/api/mcp{"mcpServers":{"dev-inkquest-inkquest":{"type":"http","url":"https://inkquest.dev/api/mcp"}}}在 Cursor 中打开{"servers":{"dev-inkquest-inkquest":{"type":"http","url":"https://inkquest.dev/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"dev-inkquest-inkquest":{"type":"http","url":"https://inkquest.dev/api/mcp"}}}{"mcpServers":{"dev-inkquest-inkquest":{"serverUrl":"https://inkquest.dev/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
3| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| genre | string | 否 | 体裁或关键词,例如 mystery、romance、xianxia、comedy 或 science fiction。不区分大小写。 |
| hsk_level | any | 否 | 中文故事的 HSK 等级。使用整数 1-9 或类似 "HSK 4" 的字符串。不适用于英语 CEFR 故事。 |
| target_language | enum | 否 | 学习语言:zh 表示中文故事,en 表示英语故事。zh | en |
详细介绍
InkQuest
使用 Next.js、Supabase 和 OpenNext Cloudflare 构建的互动式语言学习小说。
开始使用
安装依赖并运行开发服务器:
pnpm install
pnpm dev
生成故事基础设施
首个云端生成基础设施包括:
- Supabase 积分账本、预留记录、故事图谱、作业、发件箱、账单表和 RLS,位于
supabase/migrations/202608220001_generated_story_billing.sql。 - 由服务端创建的 Lemon Squeezy 结账会话,以及幂等的 Webhook 处理。
- 经过身份验证的报价和生成故事作业创建 API。
- 云端适配器契约,以及位于
tools/story-pipeline/src/core的可复用场景增强核心。
必需的服务端环境变量:
NEXT_PUBLIC_SUPABASE_URL
NEXT_PUBLIC_SUPABASE_ANON_KEY
NEXT_PUBLIC_GOOGLE_CLIENT_ID
SUPABASE_SERVICE_ROLE_KEY
NEXT_PUBLIC_SITE_URL
LEMONSQUEEZY_API_KEY
LEMONSQUEEZY_STORE_ID
LEMONSQUEEZY_WEBHOOK_SECRET
LEMONSQUEEZY_SUBSCRIPTION_VARIANT_ID
LEMONSQUEEZY_SUBSCRIPTION_CREDIT_GRANT
LEMONSQUEEZY_CREDIT_PACK_VARIANT_ID
LEMONSQUEEZY_CREDIT_PACK_GRANT
GENERATION_PRICING_VERSION
GENERATION_OPENING_TEXT_CREDITS
GENERATION_OPENING_TTS_CREDITS
GENERATION_SCENE_TEXT_CREDITS
GENERATION_SCENE_TTS_CREDITS
NEXT_PUBLIC_GOOGLE_CLIENT_ID 是 Google Cloud 中的 Web OAuth 客户端 ID。将每个已部署站点的源(包括本地开发环境)添加到已授权的 JavaScript 源中,并在 Supabase 中启用 Google 提供方。
在启用积分包产品之前,积分包变量均为可选。若相应环境变量缺失或无效,生成定价将分别回退到:开场文本 20 积分、开场 TTS 10 积分、场景文本 12 积分、场景 TTS 6 积分。仅当提供 every_scene 时才需要设置 TTS 定价。切勿通过 NEXT_PUBLIC_ 变量公开服务角色密钥、Lemon API 密钥或 Webhook 密钥。
按文件名顺序应用迁移。已经运行前两个迁移的现有环境,接下来应应用 supabase/migrations/202608230001_generated_story_tts.sql;此迁移会创建私有音频存储桶,并添加独立的 TTS 提交、重试和退款事务。
生成执行路径如下:
Next.js → inkquest-generation Queue → generation-dispatcher → Cloud Run story-pipeline Worker
主应用的其他变量:
GENERATION_DISPATCH_SECRET
GENERATED_AUDIO_BUCKET
Cloud Run Worker 变量:
SUPABASE_URL
SUPABASE_SERVICE_ROLE_KEY
GENERATION_WORKER_TOKEN
LLM_CHAT_COMPLETIONS_URL
LLM_API_KEY
LLM_MODEL
LLM_PROMPT_VERSION
TENCENT_SECRET_ID
TENCENT_SECRET_KEY
TENCENT_REGION
TENCENT_TTS_VOICE
AZURE_SPEECH_KEY
AZURE_SPEECH_REGION
AZURE_TTS_VOICE_ZH
AZURE_TTS_VOICE_EN
STORY_TTS_ZH_PROVIDER
STORY_TTS_EN_PROVIDER
GENERATED_AUDIO_BUCKET
GENERATED_AUDIO_BUCKET 默认为 generated-audio。在 Cloud Run Worker 上配置 Azure Speech 密钥和区域;已验证的评估资源使用 eastasia。配置后,中文和英文均优先使用 Azure,默认语音分别为 zh-CN-Xiaoxiao:DragonHDFlashLatestNeural 和 en-US-JennyNeural。设置 STORY_TTS_ZH_PROVIDER 或 STORY_TTS_EN_PROVIDER 为 azure 或 tencent,即可覆盖选择。Worker 镜像还会安装 FFmpeg,以便在上传前将 Tencent 的多段音频规范化为一个可搜索的 MP3 文件。
在 Cloudflare 中创建 inkquest-generation 和 inkquest-generation-dlq,部署主应用,然后部署 tools/generation-dispatcher/wrangler.jsonc。在调度器中配置 GENERATION_WORKER_URL,并使用 wrangler secret put 存储 GENERATION_WORKER_TOKEN。
本地开发时,请先在另一个终端启动 Worker,再生成故事:
PORT=8080 pnpm --filter @inkquest/story-pipeline worker:start
Next.js 开发服务器默认会将新作业分发到 http://127.0.0.1:8080。设置 GENERATION_WORKER_URL 可覆盖此地址,并确保 Next.js 与 Worker 使用相同的 GENERATION_WORKER_TOKEN。
每分钟调用一次 POST /api/internal/generation/outbox,并使用 Authorization: Bearer <GENERATION_DISPATCH_SECRET>,以恢复失败的队列发布和已过期的 Worker 租约。
MCP
公共故事目录通过 /api/mcp 提供只读的 Model Context Protocol 服务(Streamable HTTP)。该服务会列出免费故事、返回开场场景并推荐匹配项,每项都附有 https://inkquest.dev/stories/{id} 链接。它不会公开生成的故事或高级场景。设置、本地检查和注册表发布说明见 docs/mcp.md。
验证
pnpm exec tsc --noEmit
pnpm --filter @inkquest/story-pipeline typecheck
pnpm lint
pnpm build
部署使用 OpenNext Cloudflare;请参阅 wrangler.jsonc 和 package.json 中的 preview / deploy 脚本。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。