@taptap/instant-games-open-mcp 1.20.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,439 @@
1
+ # TapTap Open API MCP 服务器
2
+
3
+ > 基于 Model Context Protocol (MCP) 的 **TapTap 小游戏和 H5 游戏**服务器,提供排行榜、分享、多人联机、云存档,以及当前游戏 DC 数据查询、统计概览与评价操作能力,并支持 **OAuth 2.0 零配置认证**。
4
+
5
+ 🔐 **零配置 OAuth** | 📚 **完整文档** | 🎯 **丰富 Tools & Resources** | 🌍 **小游戏 & H5** | 📦 **单文件 Bundle**
6
+
7
+ ## ✨ 核心特性
8
+
9
+ - **🔐 零配置认证** - OAuth 2.0 Device Code Flow,扫码即用
10
+ - **📖 完整 API 文档** - 6 个排行榜 API + 详细代码示例
11
+ - **⚙️ 服务端管理** - 创建/管理排行榜,自动处理 ID
12
+ - **🎮 H5 游戏支持** - 上传、发布、状态查询
13
+ - **🧭 当前游戏 DC 能力** - 商店/评价/社区统计概览、商店快照、论坛内容、评价列表、评价点赞、官方回复
14
+ - **🦞 OpenClaw Plugin** - 提供一个原生 OpenClaw plugin 子包,内部复用 TapTap MCP 运行时并暴露 raw JSON 工具 + bundled skill
15
+ - **🚀 三种传输模式** - stdio(本地)、SSE(远程/实时)、HTTP(兼容)
16
+ - **🔌 多客户端并发** - 独立会话管理,无限并发
17
+ - **📦 单文件 Bundle** - 零依赖,包体积减少 96%(567 KB)
18
+ - **🤖 智能引导** - AI Agent 自动验证前置条件,主动询问用户选择
19
+
20
+ **NPM**: [@taptap/instant-games-open-mcp](https://www.npmjs.com/package/@taptap/instant-games-open-mcp)
21
+
22
+ ## 🦞 OpenClaw Plugin(实验中)
23
+
24
+ 仓库内提供了一个可独立发布的 OpenClaw plugin 子包:
25
+
26
+ - [`packages/openclaw-dc-plugin`](packages/openclaw-dc-plugin)
27
+
28
+ 这个子包的设计目标是:
29
+
30
+ - 让 OpenClaw 用户只安装一个 plugin
31
+ - plugin 内部复用 `@taptap/instant-games-open-mcp` 运行时
32
+ - 对 OpenClaw 暴露 raw JSON 工具
33
+ - 同时内置 `taptap-dc-ops-brief` skill,让模型自己做简报解读
34
+
35
+ 说明:
36
+
37
+ - 主包里的 `*_raw` tools 默认不会暴露给普通 MCP 客户端
38
+ - 只有设置 `TAPTAP_MCP_ENABLE_RAW_TOOLS=true` 时才会注册
39
+ - OpenClaw plugin 会自动打开这个开关,因此插件用户不需要额外配置
40
+
41
+ 详见:
42
+
43
+ - [OpenClaw Plugin 说明](docs/OPENCLAW_PLUGIN.md)
44
+ - 维护者发布方式:`npm run openclaw:pack` / `npm run openclaw:publish`
45
+
46
+ ## 🧩 Codex Skills(运营简报)
47
+
48
+ 本仓库内置一个面向运营/工作室的 Codex Skill:`taptap-dc-ops-brief`,用于把“当前游戏 DC 数据”整理成 30 秒可读的结论简报,并在你确认后执行评价点赞/官方回复等动作。
49
+
50
+ ### 安装到 Codex
51
+
52
+ 在已安装 Codex 的机器上运行:
53
+
54
+ ```bash
55
+ python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
56
+ --repo taptap/instant-games-open-mcp \
57
+ --path skills/taptap-dc-ops-brief
58
+ ```
59
+
60
+ 安装完成后重启 Codex,即可在对话中使用:
61
+
62
+ > 使用 `$taptap-dc-ops-brief` 生成当前游戏的 7 日运营简报,并给出是否建议点赞/回复评价(先出草稿,等我确认再发)。
63
+
64
+ ## 🚀 快速开始
65
+
66
+ > 🐣 **完全不懂技术?** [快速开始(零基础版)](docs/QUICK_START.md) - 3 分钟搞定 Cursor 配置,复制粘贴就能用。
67
+ >
68
+ > 📖 **想了解更多配置?** [详细配置指南](docs/USER_GUIDE.md) - Cursor、Claude Code、VS Code、Claude Desktop 等多种工具的配置方法。
69
+
70
+ ### 安装
71
+
72
+ ```bash
73
+ # 全局安装
74
+ npm install -g @taptap/instant-games-open-mcp
75
+
76
+ # 或使用 npx 直接运行(无需安装)
77
+ npx @taptap/instant-games-open-mcp
78
+ ```
79
+
80
+ ### 配置(MCP 客户端)
81
+
82
+ #### Claude Code / VSCode / Cursor
83
+
84
+ 在项目中创建 `.mcp.json`:
85
+
86
+ ```json
87
+ {
88
+ "mcpServers": {
89
+ "taptap-minigame": {
90
+ "command": "npx",
91
+ "args": ["-y", "@taptap/instant-games-open-mcp"],
92
+ "env": {
93
+ "TAPTAP_MCP_WORKSPACE_ROOT": "${workspaceFolder}"
94
+ }
95
+ }
96
+ }
97
+ }
98
+ ```
99
+
100
+ **重要说明**:
101
+
102
+ - **零配置 OAuth**:首次使用会提示扫码授权,token 自动保存!
103
+ - **路径处理**:设置 `TAPTAP_MCP_WORKSPACE_ROOT` 环境变量可以正确解析相对路径(推荐)
104
+ - 如果不设置,相对路径会基于用户 HOME 目录(可能不符合预期)
105
+ - 建议使用绝对路径,或配置 `TAPTAP_MCP_WORKSPACE_ROOT`
106
+
107
+ #### OpenHands(推荐 SSE 模式)
108
+
109
+ **远程部署**:
110
+
111
+ ```bash
112
+ # 启动 SSE 服务器
113
+ TAPTAP_MCP_TRANSPORT=sse TAPTAP_MCP_PORT=3000 \
114
+ npx @taptap/instant-games-open-mcp
115
+ ```
116
+
117
+ **OpenHands 配置**:
118
+
119
+ ```json
120
+ {
121
+ "mcpServers": {
122
+ "taptap-minigame": {
123
+ "url": "http://your-server:3000",
124
+ "transport": "sse"
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ ✅ SSE 模式支持实时进度推送!
131
+
132
+ ### Docker 部署
133
+
134
+ ```bash
135
+ # 快速启动(同时运行 Production 和 RND 环境)
136
+ cd docker/npm
137
+ docker-compose up -d
138
+
139
+ # 健康检查
140
+ curl http://localhost:5003/health # Production
141
+ curl http://localhost:5002/health # RND
142
+ ```
143
+
144
+ 详见: [Docker 部署文档](docker/README.md)
145
+
146
+ ## 📖 功能列表
147
+
148
+ ### 核心 Tools(含当前游戏 DC 能力)
149
+
150
+ #### 流程指引 (1)
151
+
152
+ - `get_leaderboard_integration_guide` - 排行榜完整接入工作流指引
153
+
154
+ #### 信息查询 (2)
155
+
156
+ - `get_current_app_info` - 获取当前应用信息
157
+ - `check_environment` - 检查环境配置
158
+
159
+ #### 认证 (3)
160
+
161
+ - `start_oauth_authorization` - 开始 OAuth 授权(获取二维码)
162
+ - `complete_oauth_authorization` - 完成 OAuth 授权
163
+ - `clear_auth_data` - 清除认证数据和缓存
164
+
165
+ #### 应用管理 (3)
166
+
167
+ - `list_developers_and_apps` - 列出所有开发者和应用(含关卡与非关卡)
168
+ - `select_app` - 选择当前应用(支持关卡与非关卡)
169
+ - `create_developer` - 创建新开发者
170
+
171
+ #### 当前游戏 DC 能力 (8)
172
+
173
+ - `get_current_app_store_overview` - 获取当前游戏商店统计概览(曝光、下载、预约、下载请求趋势)
174
+ - `get_current_app_review_overview` - 获取当前游戏评价统计概览(评分、好中差评、评分趋势)
175
+ - `get_current_app_community_overview` - 获取当前游戏社区统计概览(帖子、关注、浏览、趋势)
176
+ - `get_current_app_store_snapshot` - 获取当前游戏商店结果型快照
177
+ - `get_current_app_forum_contents` - 获取当前游戏论坛内容
178
+ - `get_current_app_reviews` - 获取当前游戏评价列表
179
+ - `like_current_app_review` - 给当前游戏指定评价点赞
180
+ - `reply_current_app_review` - 以官方身份回复当前游戏评价
181
+
182
+ #### 排行榜管理 (5)
183
+
184
+ - `create_leaderboard` - 创建排行榜
185
+ - `list_leaderboards` - 列出排行榜
186
+ - `publish_leaderboard` - 发布排行榜
187
+ - `get_user_leaderboard_scores` - 获取用户分数
188
+ - `get_app_status` - 获取应用审核状态
189
+
190
+ #### H5 游戏管理 (3)
191
+
192
+ - `prepare_h5_upload` - 收集 H5 游戏信息(上传前)
193
+ - `upload_h5_game` - 上传 H5 游戏包
194
+ - `get_debug_feedbacks` - 拉取用户调试反馈并下载日志/截图
195
+
196
+ #### 振动 API 文档 (1)
197
+
198
+ - `get_vibrate_integration_guide` - 振动 API 完整文档和接入指引
199
+
200
+ ### 11 个 Resources
201
+
202
+ 完整的排行榜 API 文档:
203
+
204
+ - `docs://leaderboard/overview` - 完整概览
205
+ - `docs://leaderboard/api/get-manager` - 初始化
206
+ - `docs://leaderboard/api/submit-scores` - 提交分数
207
+ - `docs://leaderboard/api/open` - 显示 UI
208
+ - `docs://leaderboard/api/load-scores` - 加载数据
209
+ - `docs://leaderboard/api/load-player-score` - 玩家排名
210
+ - `docs://leaderboard/api/load-centered-scores` - 周围玩家
211
+
212
+ 完整的振动 API 文档:
213
+
214
+ - `docs://vibrate/overview` - 完整概览
215
+ - `docs://vibrate/api/vibrate-short` - 短振动 API
216
+ - `docs://vibrate/api/vibrate-long` - 长振动 API
217
+ - `docs://vibrate/patterns` - 使用模式和最佳实践
218
+
219
+ ## 🎯 使用示例
220
+
221
+ ### 接入排行榜
222
+
223
+ ```
224
+ 用户: "我想在游戏中接入排行榜"
225
+
226
+ AI 调用: get_integration_guide
227
+ → 返回完整工作流(创建排行榜 → 客户端代码 → 测试)
228
+
229
+ AI 调用: create_leaderboard
230
+ → 创建服务端排行榜
231
+
232
+ AI 读取: docs://leaderboard/api/submit-scores
233
+ → 获取客户端代码示例
234
+ ```
235
+
236
+ ### OAuth 授权(首次)
237
+
238
+ ```
239
+ AI 调用: create_leaderboard
240
+ → 🔐 需要授权,显示二维码链接
241
+
242
+ 用户: 扫码后告知 "已授权"
243
+
244
+ AI 调用: complete_oauth_authorization
245
+ → ✅ 授权完成,token 已保存
246
+
247
+ AI 调用: create_leaderboard
248
+ → ✅ 排行榜创建成功
249
+ ```
250
+
251
+ ## 🛠️ 开发
252
+
253
+ ### 环境要求
254
+
255
+ - Node.js 18.14.1+
256
+ - npm 或 pnpm
257
+
258
+ ### 本地开发
259
+
260
+ ```bash
261
+ # 安装依赖
262
+ npm install
263
+
264
+ # 启动开发服务器
265
+ npm run dev
266
+
267
+ # 构建
268
+ npm run build
269
+
270
+ # 运行测试
271
+ npm test
272
+ ```
273
+
274
+ ### 环境变量
275
+
276
+ **OAuth 认证(推荐)**:
277
+
278
+ - 无需配置!自动保存 token 到 `~/.config/taptap-minigame/`
279
+
280
+ **手动配置(可选)**:
281
+
282
+ - `TAPTAP_MCP_MAC_TOKEN` - MAC Token(JSON 格式)
283
+ - `TAPTAP_MCP_CLIENT_ID` - 客户端 ID(非必需,不配置会导致部分工具无法使用)
284
+ - `TAPTAP_MCP_CLIENT_SECRET` - 签名密钥(非必需,不配置会导致部分工具无法使用)
285
+
286
+ **其他**:
287
+
288
+ - `TAPTAP_MCP_ENV` - 环境:`production`(默认)或 `rnd`
289
+ - `TAPTAP_MCP_DC_CURRENT_APP_BASE_URL` - 当前游戏 DC 接口 host 覆盖(可选,路径仍为 `/mcp/v1/current-app/...`)
290
+ - `TAPTAP_MCP_TRANSPORT` - 传输模式:`stdio`(默认)、`sse`、`http`
291
+ - `TAPTAP_MCP_PORT` - 端口(默认 3000)
292
+ - `TAPTAP_MCP_VERBOSE` - 详细日志:`true` 或 `false`
293
+ - `TAPTAP_MCP_CACHE_DIR` - 缓存目录(默认 `/tmp/taptap-mcp/cache`)
294
+ - `TAPTAP_MCP_TEMP_DIR` - 临时文件目录(默认 `/tmp/taptap-mcp/temp`)
295
+
296
+ **日志配置**:
297
+
298
+ - `TAPTAP_MCP_LOG_ROOT` - 日志根目录(默认 `/tmp/taptap-mcp/logs`)
299
+ - `TAPTAP_MCP_LOG_FILE` - 启用文件日志:`true` 或 `false`(默认 `false`)
300
+ - `TAPTAP_MCP_LOG_LEVEL` - 日志级别(RFC 5424):`debug`、`info`、`notice`、`warning`、`error`、`critical`、`alert`、`emergency`(默认 `info`)
301
+ - `TAPTAP_MCP_LOG_MAX_DAYS` - 日志保留天数(默认 7)
302
+
303
+ 详细说明请参考 [docs/LOG_SYSTEM.md](docs/LOG_SYSTEM.md)
304
+
305
+ ### 添加新功能
306
+
307
+ ```bash
308
+ # 使用脚手架
309
+ ./scripts/create-feature.sh
310
+
311
+ # 按提示输入功能信息
312
+ # 自动生成模块结构到 src/features/yourFeature/
313
+ ```
314
+
315
+ ## 🤖 AI Agent 智能引导
316
+
317
+ 本服务器经过精心设计,通过工具描述引导 AI Agent 提供更智能的用户体验:
318
+
319
+ ### 自动前置条件检查
320
+
321
+ AI Agent 会在执行排行榜操作前,自动检查是否已选择应用:
322
+
323
+ ```
324
+ 用户: "创建一个排行榜"
325
+
326
+ AI: 让我先检查当前是否已选择应用...
327
+ [调用 get_current_app_info]
328
+
329
+ 发现尚未选择应用,我来帮您列出可用的应用:
330
+ [调用 list_developers_and_apps]
331
+
332
+ 请问您想为哪个应用创建排行榜?
333
+ 1. 游戏 A (Developer: 开发者A, App ID: 12345)
334
+ 2. 游戏 B (Developer: 开发者B, App ID: 67890)
335
+ ```
336
+
337
+ ### 主动询问用户选择
338
+
339
+ 当有多个选项时,AI Agent 会主动展示列表并询问用户:
340
+
341
+ ```
342
+ 用户: "查看排行榜"
343
+
344
+ AI: 您有以下几个排行榜:
345
+ 1. 每日高分榜 (ID: lb_001)
346
+ 2. 周排行榜 (ID: lb_002)
347
+ 3. 全服总榜 (ID: lb_003)
348
+
349
+ 请问您想查看哪一个?
350
+ ```
351
+
352
+ ### 工作流程自动优化
353
+
354
+ AI Agent 会自动引导用户完成必要的步骤,避免操作失败:
355
+
356
+ ```mermaid
357
+ graph LR
358
+ A[用户请求] --> B{检查应用选择}
359
+ B -->|未选择| C[列出应用]
360
+ C --> D[询问用户]
361
+ D --> E[选择应用]
362
+ E --> F[执行操作]
363
+ B -->|已选择| F
364
+ ```
365
+
366
+ **受益场景:**
367
+
368
+ - 创建/查询排行榜
369
+ - 发布排行榜
370
+ - 上传 H5 游戏
371
+ - 所有需要应用上下文的操作
372
+
373
+ **技术实现:**
374
+ 通过在工具描述中使用 `**PREREQUISITE:**`、`**CRITICAL:**`、`**IMPORTANT:**` 等关键词,以及明确的步骤指导,让 AI Agent 理解何时需要检查前置条件、何时应该询问用户。
375
+
376
+ 详见:[CLAUDE.md - AI Agent 工具使用指导](CLAUDE.md#ai-agent-工具使用指导)
377
+
378
+ ## 📚 文档
379
+
380
+ ### 用户文档
381
+
382
+ - **[docs/USER_GUIDE.md](docs/USER_GUIDE.md)** - 🐣 新手配置指南(Cursor/VS Code/Claude Code)
383
+ - **[CONTRIBUTING.md](CONTRIBUTING.md)** - 贡献指南
384
+ - **[CHANGELOG.md](CHANGELOG.md)** - 版本变更历史
385
+
386
+ ### 技术文档
387
+
388
+ - **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** - 架构文档
389
+ - **[docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)** - 部署指南(本地、Docker、开发者测试)
390
+ - **[docs/PROXY.md](docs/PROXY.md)** - MCP Proxy 开发指南(面向 TapCode 等平台)
391
+ - **[docs/CI_CD.md](docs/CI_CD.md)** - CI/CD 和自动化发布流程
392
+ - **[docs/PATH_RESOLUTION.md](docs/PATH_RESOLUTION.md)** - 路径解析系统
393
+
394
+ ## 🔄 CI/CD
395
+
396
+ 基于 Conventional Commits 的完全自动化发布:
397
+
398
+ ```bash
399
+ # 创建功能分支
400
+ git checkout -b feat/awesome-feature
401
+
402
+ # 提交代码
403
+ git commit -m "feat: add awesome feature"
404
+
405
+ # 创建 PR 并合并
406
+ gh pr create && gh pr merge
407
+
408
+ # 自动发布到 npm(版本:1.4.13 → 1.5.0)
409
+ ```
410
+
411
+ **发布流程**:
412
+
413
+ 1. PR 合并 → 触发 Actions
414
+ 2. 分析 commits 确定版本号
415
+ 3. 发布到 npm
416
+ 4. 自动创建版本 PR 并合并
417
+ 5. 创建 GitHub Release
418
+
419
+ 详见: [docs/CI_CD.md](docs/CI_CD.md)
420
+
421
+ ## 🤝 贡献
422
+
423
+ 欢迎贡献!请遵循:
424
+
425
+ 1. Fork 仓库并创建 feature 分支
426
+ 2. 使用 Conventional Commits 规范
427
+ 3. 创建 PR,等待 CI 检查
428
+ 4. Review 通过后合并
429
+
430
+ ## 📄 许可证
431
+
432
+ MIT
433
+
434
+ ## 🔗 相关链接
435
+
436
+ - [TapTap 开发者中心](https://developer.taptap.cn/)
437
+ - [官方 API 文档](https://developer.taptap.cn/minigameapidoc/dev/api/open-api/leaderboard/)
438
+ - [MCP 协议规范](https://modelcontextprotocol.io/)
439
+ - [Issues](https://github.com/taptap/instant-games-open-mcp/issues)
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * TapTap Minigame Open API MCP Server
5
+ * Entry point for NPM executable
6
+ *
7
+ * Note: Converted to ESM to match package "type": "module"
8
+ */
9
+
10
+ import { join, dirname } from 'node:path';
11
+ import { existsSync, readdirSync } from 'node:fs';
12
+ import { fileURLToPath } from 'node:url';
13
+
14
+ // Get current directory in ESM
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = dirname(__filename);
17
+
18
+ // Get package root directory
19
+ const packageRoot = join(__dirname, '..');
20
+
21
+ // Check if compiled version exists
22
+ const distPath = join(packageRoot, 'dist', 'server.js');
23
+ const nativePath = join(packageRoot, 'dist', 'native');
24
+
25
+ if (!existsSync(distPath)) {
26
+ console.error('');
27
+ console.error('❌ dist/server.js not found!');
28
+ console.error('');
29
+ console.error('Please build the project first:');
30
+ console.error('');
31
+ console.error(' npm run build # Build server + proxy (skip native)');
32
+ console.error(' npm run build:all # Build all (including native signer)');
33
+ console.error('');
34
+ process.exit(1);
35
+ }
36
+
37
+ // Check native signer
38
+ if (!existsSync(nativePath)) {
39
+ console.warn('');
40
+ console.warn('⚠️ dist/native/ not found');
41
+ console.warn(' Native signer will not be available.');
42
+ console.warn(' Set TAPTAP_MCP_CLIENT_ID and TAPTAP_MCP_CLIENT_SECRET for authentication.');
43
+ console.warn('');
44
+ } else {
45
+ const nodeFiles = readdirSync(nativePath).filter(f => f.endsWith('.node'));
46
+ if (nodeFiles.length === 0) {
47
+ console.warn('');
48
+ console.warn('⚠️ No .node binaries found in dist/native/');
49
+ console.warn(' Run: npm run build:native');
50
+ console.warn('');
51
+ }
52
+ }
53
+
54
+ // Start server
55
+ import(distPath).catch(error => {
56
+ console.error('');
57
+ console.error('❌ Failed to start server:', error.message);
58
+ console.error('');
59
+ if (error.code === 'ERR_MODULE_NOT_FOUND') {
60
+ console.error('Missing dependency. Try rebuilding:');
61
+ console.error(' npm run build');
62
+ }
63
+ process.exit(1);
64
+ });
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * TapTap MCP Proxy
5
+ * Entry point for NPM executable
6
+ *
7
+ * Note: Converted to ESM to match package "type": "module"
8
+ */
9
+
10
+ import { join, dirname } from 'node:path';
11
+ import { existsSync } from 'node:fs';
12
+ import { fileURLToPath } from 'node:url';
13
+
14
+ // Get current directory in ESM
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = dirname(__filename);
17
+
18
+ // Get package root directory
19
+ const packageRoot = join(__dirname, '..');
20
+
21
+ // Check if bundled version exists
22
+ const distPath = join(packageRoot, 'dist', 'proxy.js');
23
+
24
+ if (existsSync(distPath)) {
25
+ // Use dynamic import for ES Module
26
+ import(distPath).catch(error => {
27
+ console.error('❌ Failed to start MCP Proxy:', error);
28
+ process.exit(1);
29
+ });
30
+ } else {
31
+ console.error('❌ MCP Proxy bundle not found. Please build the project first:');
32
+ console.error(' npm run build');
33
+ process.exit(1);
34
+ }
@@ -0,0 +1,95 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /* auto-generated by NAPI-RS */
5
+
6
+ /**
7
+ * Compute X-Tap-Sign signature
8
+ *
9
+ * This function generates the X-Tap-Sign header value using the embedded CLIENT_SECRET.
10
+ *
11
+ * ## Signature Format
12
+ *
13
+ * ```text
14
+ * sign_parts = "{method}
15
+ {url}
16
+ {headers_part}
17
+ {body}
18
+ "
19
+ * signature = base64(HMAC-SHA256(sign_parts, CLIENT_SECRET))
20
+ * ```
21
+ *
22
+ * ## Arguments
23
+ *
24
+ * * `method` - HTTP method (GET, POST, etc.)
25
+ * * `url` - Request URL path with query string (e.g., "/api/v1/apps?client_id=xxx")
26
+ * * `headers_part` - Sorted X-Tap-* headers in format "key:value
27
+ key:value"
28
+ * * `body` - Request body (empty string for GET requests)
29
+ *
30
+ * ## Returns
31
+ *
32
+ * Base64-encoded HMAC-SHA256 signature
33
+ *
34
+ * ## Example
35
+ *
36
+ * ```javascript
37
+ * const signature = computeTapSign(
38
+ * "POST",
39
+ * "/api/v1/apps?client_id=xxx",
40
+ * "x-tap-nonce:abc123
41
+ x-tap-ts:1234567890",
42
+ * '{"name":"test"}'
43
+ * );
44
+ * ```
45
+ */
46
+ export declare function computeTapSign(method: string, url: string, headersPart: string, body: string): string
47
+ /**
48
+ * Get the embedded CLIENT_ID
49
+ *
50
+ * This returns the CLIENT_ID that was embedded at compile time.
51
+ * Useful for the MCP server to include in API requests.
52
+ *
53
+ * ## Returns
54
+ *
55
+ * The CLIENT_ID as a string
56
+ *
57
+ * ## Example
58
+ *
59
+ * ```javascript
60
+ * const clientId = getClientId();
61
+ * // Use in API requests: ?client_id=${clientId}
62
+ * ```
63
+ */
64
+ export declare function getClientId(): string
65
+ /**
66
+ * Verify module integrity
67
+ *
68
+ * Performs basic checks to ensure the native module is intact and functional.
69
+ *
70
+ * ## Returns
71
+ *
72
+ * `true` if the module is functional, throws error otherwise
73
+ *
74
+ * ## Example
75
+ *
76
+ * ```javascript
77
+ * try {
78
+ * const ok = verifyIntegrity();
79
+ * console.log('Native signer is ready');
80
+ * } catch (e) {
81
+ * console.error('Native signer failed integrity check:', e);
82
+ * }
83
+ * ```
84
+ */
85
+ export declare function verifyIntegrity(): boolean
86
+ /**
87
+ * Get version information
88
+ *
89
+ * Returns the version of the native signer module.
90
+ *
91
+ * ## Returns
92
+ *
93
+ * Version string in format "x.y.z"
94
+ */
95
+ export declare function getVersion(): string