Atlas / MCP servers / taptap / TapTap Open API MCP 服务器

TapTap Open API MCP 服务器BLOCK

mcp/taptap/instant-games-open-mcp

TapTap 小游戏开放能力 mcp

Verdict
BLOCK
Grade
F
Trust score
43 /100
Exposed tools
67 48r · 17w · 2d
Transport
stdio · streamable-http
License
—
Stars
43
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

基于 Model Context Protocol (MCP) 的 TapTap 小游戏和 H5 游戏服务器,提供排行榜、分享、多人联机、云存档,以及当前游戏 DC 数据查询、统计概览与评价操作能力,并支持 OAuth 2.0 零配置认证。

🔐 零配置 OAuth | 📚 完整文档 | 🎯 丰富 Tools & Resources | 🌍 小游戏 & H5 | 📦 单文件 Bundle

✨ 核心特性

  • 🔐 零配置认证 - OAuth 2.0 Device Code Flow,扫码即用
  • 📖 完整 API 文档 - 6 个排行榜 API + 详细代码示例
  • ⚙️ 服务端管理 - 创建/管理排行榜,自动处理 ID
  • 🎮 H5 游戏支持 - 上传、发布、状态查询
  • 📺 广告接入闭环 - 仅用于 TapTap 小游戏/H5,自动查询广告状态和广告位 ID;方向缺失时先刷新

服务端应用信息,确认仍未设置后引导用户选择方向,不与 Maker MCP 混用

  • 🧭 当前游戏 DC 能力 - 商店/评价/社区统计概览、商店快照、论坛内容、评价列表、评价点赞、官方回复
  • 🦞 OpenClaw Plugin - 提供一个原生 OpenClaw plugin 子包,内部复用 TapTap MCP 运行时并暴露 raw JSON 工具 + bundled skill
  • 🚀 三种传输模式 - stdio(本地)、SSE(远程/实时)、HTTP(兼容)
  • 🔌 多客户端并发 - 独立会话管理,无限并发
  • 📦 单文件 Bundle - 零依赖,包体积减少 96%(567 KB)
  • 🤖 智能引导 - AI Agent 自动验证前置条件,主动询问用户选择

NPM: @taptap/instant-games-open-mcp Maker NPM: @taptap/maker

Maker 创作画布的 UI 设计稿、多轮识别、去文字、分层图集和独立 PNG 导出流程见 Maker UI 工作流。

控制台新增「UI 编辑器」页签:直接读取当前项目的 .ui.json,支持节点编辑、左右设计稿对照、 透明度叠加和按需查看变更,保存直接写入当前项目。刷新文件列表保留编辑草稿和撤销历史。 编辑器随 Maker 包内置,无需另装或启动服务;顶部问号链接到在线示例。 控制台各页签统一使用紧凑顶部;深浅色切换同步自由画布和 UI 编辑器,无需刷新,不丢失草稿。 UI 编辑器与控制台共用配色:普通按钮为中性色,保存、选中态和勾选控件采用黄色强调。 旧项目写在 Lua 中的 UI 可由内置 lua-ui-to-json Skill 提取为可编辑的 .ui.json,并运行静态检查; 默认保留游戏入口和行为逻辑,已有 JSON 不覆盖用户编辑。 模板与示例媒体不装入 npm 包,首次使用按需从 CDN 下载,失败时尝试 GitHub,校验后缓存到本机。 官方模板图片统一运行 npm run maker:resources:prepare 做无损压缩与像素核对;未处理或未上传 CDN 会阻止打包,发布时再验证两个下载源。维护流程见 示例资源维护。 对 AI 说“把设计稿做成游戏 UI”“拆 UI 素材”或“把切图拼成 UI.json”,通过内置 maker-ui-workflow Skill 从对应阶段继续,不新增 MCP tools。 UI 复原使用 Skill 自带组装脚本:按稳定编号与原稿坐标组装,保留备用切图, 再通过 UI 编辑器对照截图记录纠偏;由 AI 分阶段执行与复核,详见同一工作流文档。

Maker 支持本地控制台管理项目、构建和 Git 历史,并在文件不冲突时拉取远端代码;项目页可查看所有项目 共用的本机 Runtime 与独立 Lua LSP 安装状态,构建页可单独检查 Lua,构建前默认可选检查。构建失败信息 默认展开。构建与本地预览快捷操作会自动切换到对应工作页。构建页按当前阶段显示真实进度, 构建详情与 Runtim

Read from source at commit 38e77230e982OBSERVED · 2026-10-12
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add taptap-mcp-proxy --env BUILD_CLIENT_SECRET=${BUILD_CLIENT_SECRET} --env TAPTAP_MAKER_TAP_TOKEN_URL=${TAPTAP_MAKER_TAP_TOKEN_URL} --env TAPTAP_MCP_CLIENT_SECRET=${TAPTAP_MCP_CLIENT_SECRET} --env TAPTAP_MCP_MAC_TOKEN=${TAPTAP_MCP_MAC_TOKEN} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "taptap-mcp-proxy": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "BUILD_CLIENT_SECRET": "${BUILD_CLIENT_SECRET}",
        "TAPTAP_MAKER_TAP_TOKEN_URL": "${TAPTAP_MAKER_TAP_TOKEN_URL}",
        "TAPTAP_MCP_CLIENT_SECRET": "${TAPTAP_MCP_CLIENT_SECRET}",
        "TAPTAP_MCP_MAC_TOKEN": "${TAPTAP_MCP_MAC_TOKEN}"
      }
    }
  }
}
03

Exposed tools (67)

48 read · 17 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
add_test_whitelistwriteAdd one TapTap user to the test whitelist
audition_voices_for_characterreadGenerate voice candidates for one character
batch_generate_imagesreadGenerate several images
batch_sound_effectsreadGenerate several sound effects
buildreadHidden remote build tool
check_ads_statusread[Step 2 of Ads Workflow] Check server-side ads monetization status and cache the current selected app
check_environmentreadCheck environment configuration and user authentication status. Use this to verify the current TAPTAP_MCP_ENV, signer mode, TAPTAP_MCP_MAC_TOKEN, and TAPTAP_MCP_CLIENT_ID configuration. If the user asks how to switch between production and RND, call get_environment_switch_guide.
check_environment_rawread[Raw JSON] Return structured environment, signer, and authentication status for agent/plugin consumption.
check_multiplayer_coderead✅ Check multiplayer code before deployment. Detects: - Missing rate limiting - Wrong field names (playerId vs id) - Missing playerId save - Uninitialized remote players - Protocol inconsistency Use when: Before finalizing code, or when debugging.
clear_auth_datadestructiveClear all cached authentication data and app selection. Use this when: 1) MAC Token expired or invalid, 2) Want to switch accounts, 3) Need to reset authentication. This will clear both OAuth token file and app cache.
clear_auth_data_rawdestructive[Raw JSON] Clear cached OAuth token and/or selected app cache, returning structured result JSON.
complete_oauth_authorizationread[Auth] Complete OAuth authorization after user has scanned QR code. Call this after user confirms they have completed authorization in browser. This tool will poll for the authorization result and save the token.
complete_oauth_authorization_rawread[Raw JSON] Complete OAuth authorization after the user scanned and approved the QR code. Returns structured authorization result JSON.
confirm_character_voicereadConfirm one voice candidate
create_3d_assetwriteCreate or continue a controlled 3D asset generation lifecycle
create_appwriteCreate a new app/game on TapTap platform. **The newly created app will be automatically selected** - no need to call select_app afterwards. Use this when user wants to create a new app.
create_developerwriteCreate a new unverified developer identity on TapTap platform. Use this when user wants to create a new developer account.
create_leaderboardwrite**PREREQUISITE: An app MUST be selected first.** Before calling this tool, ALWAYS call get_current_app_info to verify an app is selected. If not, guide user through: 1) Call list_developers_and_apps, 2) Show list to user and ASK them to choose, 3) Call select_app with user
create_share_templatewrite**PREREQUISITE: An app MUST be selected first.** Before calling this tool, ALWAYS call get_current_app_info to verify an app is selected. If not, guide user through: 1) Call list_developers_and_apps, 2) Show list to user and ASK them to choose, 3) Call select_app with user
create_video_taskwriteCreate a text-to-video generation task
diagnose_multiplayer_issuesread🔍 Diagnose common multiplayer issues. Use when user reports: - Players not visible / 看不到其他玩家 - Position not syncing / 位置不同步 - Connection failed / 连接失败 - Data not received / 收不到数据 Returns: Checklist with solutions for each issue.
edit_imagewriteEdit an image
generate_imagereadGenerate one image
generate_local_guideread📄 Generate MULTIPLAYER_GUIDE.md for user project root. Creates persistent reference with API rate limits, playerId rules, data structures. Enables context persistence across conversations. Use at project start.
generate_multiplayer_codewrite🎯 One-click: Generate complete multiplayer files ready to save. Generates: 1. js/MultiplayerManager.js (complete template with comments) 2. MULTIPLAYER_GUIDE.md (quick reference for project) Returns: File paths and contents, ready to save. Use when: User wants quick setup, or says
generate_test_qrcodereadGenerate a test QR code for mobile testing
get_ad_configwriteSync ad config into project settings
get_ad_integration_guideread[Step 3 of Ads Workflow] Get the TapTap Minigame/H5 ads integration guide with the current selected app
get_api_data_structuresread📊 Get complete API return value structures and event callback data structures. Includes all core APIs (connect, matchRoom, sendCustomMessage, etc) and events (playerEnterRoom, onCustomMessage, etc). Use when implementing API calls to avoid guessing data structures.
get_app_statusreadGet the review status of an app/game. Use this to check if the app is published, under review, or rejected.
get_code_templatereadGet complete MultiplayerManager.js template (350+ lines). Core methods: - 📤 sendData(data) → Send your action to others - 📥 onDataReceived(data, fromId) → Receive others
get_current_app_community_overviewread**PREREQUISITE: An app MUST be selected first.** Before calling this tool, ALWAYS verify the selected app context. Get community overview metrics for the currently selected app, including topic count, favorite count, page views, feed count, and trend data for an optional date range.
get_current_app_community_overview_rawread[Raw JSON] Return current-app community overview data as structured JSON for agent/plugin consumption.
get_current_app_forum_contentsread**PREREQUISITE: An app MUST be selected first.** Read forum contents for the currently selected app only. Use this to inspect the game forum feed before summarizing community topics. This tool is scoped to the selected app and MUST NOT be used for cross-game browsing.
get_current_app_forum_contents_rawread[Raw JSON] Return current-app forum contents as structured JSON for agent/plugin consumption.
get_current_app_info_rawread[Raw JSON] Return the currently selected app/cache payload as structured JSON for agent/plugin consumption.
get_current_app_review_overviewread**PREREQUISITE: An app MUST be selected first.** Before calling this tool, ALWAYS verify the selected app context. Get review overview metrics for the currently selected app, including rating summary, rating score, positive/neutral/negative review counts, and trend data for an optional date range.
get_current_app_review_overview_rawread[Raw JSON] Return current-app review overview data as structured JSON for agent/plugin consumption.
get_current_app_reviewsread**PREREQUISITE: An app MUST be selected first.** List reviews for the currently selected app only. Use this before like/reply actions so the user can inspect the review list and confirm the target review_id. Supports sort, pagination, collapsed reviews, and platform filter.
get_current_app_reviews_rawread[Raw JSON] Return current-app reviews as structured JSON for agent/plugin consumption.
get_current_app_store_overview_rawread[Raw JSON] Return current-app store overview data as structured JSON for agent/plugin consumption.
get_current_app_store_snapshot_rawread[Raw JSON] Return current-app store snapshot data as structured JSON for agent/plugin consumption.
get_debug_feedbacksreadDownload debug feedbacks and query game session logs
get_debug_loggerread🔧 Get on-screen debug logger / 屏幕日志系统 / 调试日志工具. CALL THIS WHEN user says: -
get_extended_apisread🟡 Get extended APIs quick reference: createRoom, getRoomList, joinRoom, kickRoomPlayer, disconnect, updatePlayerCustomStatus. ONLY use when user explicitly requests room list UI, custom room creation, friend invitation, or player kick functionality. These are OPTIONAL.
get_leaderboard_integration_guidewrite⭐ READ THIS FIRST when user wants to integrate/接入/setup/add leaderboard功能. Returns complete step-by-step workflow. CRITICAL: Emphasizes NO SDK installation - tap is global object. Call this BEFORE making any implementation plans.
get_player_id_guideread🔑 Get Player ID usage guide: how to get local player ID from connect(), check
get_protocol_templateread⚠️ CRITICAL - Communication protocol template to ensure consistency. PURPOSE: Prevent AI from using different protocols for different features. COMMON MISTAKE (AI often does this): - Feature 1: { type:
get_sync_strategywrite🎮 Get synchronization strategy guide for joystick/WASD controls and click-based movement. Includes timer-based sync pattern (100ms interval) and change detection. Use when implementing position synchronization or continuous input handling.
get_user_leaderboard_scoresreadGet user leaderboard scores. Requires MAC Token authentication.
like_current_app_review_rawread[Raw JSON] Like a current-app review and return the structured upstream response.
list_developers_and_apps_rawread[Raw JSON] List all developers and their apps/games, including level and non-level apps, as structured JSON.
list_leaderboardsread**PREREQUISITE: An app MUST be selected first.** Before calling this tool, ALWAYS call get_current_app_info to verify an app is selected. If not, guide user through: 1) Call list_developers_and_apps, 2) Show list to user and ASK them to choose, 3) Call select_app with user
list_share_templatesread**PREREQUISITE: An app MUST be selected first.** Before calling this tool, ALWAYS call get_current_app_info to verify an app is selected. If not, guide user through: 1) Call list_developers_and_apps, 2) Show list to user and ASK them to choose, 3) Call select_app with user
maker_status_litereadstatus
prepare_h5_uploadwrite[H5 Game Upload Workflow - Step 1] Use this tool when user wants to publish/upload/deploy H5 game (
query_video_taskreadQuery a text-to-video generation task
reply_current_app_review_rawread[Raw JSON] Reply to a current-app review and return the structured upstream response.
select_app_rawread[Raw JSON] Select a specific developer/app pair and return the cached selection payload as structured JSON.
sharereadTapTap Share 功能
start_oauth_authorizationwrite[Auth] Start OAuth 2.0 Device Code Flow to get authorization URL. Use this when: 1) User explicitly wants to authorize, 2) User needs to login or switch account, 3) Token expired or invalid. Returns a QR code URL for user to scan with TapTap App.
start_oauth_authorization_rawwrite[Raw JSON] Start OAuth 2.0 Device Code Flow and return device_code, qrcode_url, auth_url, and expiry information as structured JSON.
text_to_dialoguereadGenerate character dialogue
text_to_musicreadGenerate music from text
text_to_sound_effectreadGenerate one sound effect
update_app_infowriteUpdate the app
upload_imagewriteUpload an image to TapTap server and get a URL. Use this to upload icon, banner, or screenshots before calling update_app_info. Accepts either a local file path or base64 encoded image data.
04

Trust audit

BLOCKgrade F · trust 43/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (11 observation(s))
Network
declared (10 observation(s))
Shell
declared (8 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
scripts/test-maker-canvas-card-status.mjs:36
new Function(html.match(/<script>([\s\S]*?)<\/script>/i)[1]);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/maker/console/gitPull.ts:304
const result = await exec(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/maker/console/projects.ts:48
const result = await exec(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInventory / provenance · inv.binary · CWE-1104
src/.DS_Store
.DS_Store
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/server.ts:726
logger.warning(`Failed to parse MAC Token from header: ${error}`);
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/test-maker-canvas-card-status.mjs:147
await page.goto('http://127.0.0.1/canvas?project=status-test');
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/test-maker-canvas-export.mjs:150
await page.goto('http://127.0.0.1/canvas?project=export-test');
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
src/maker/canvas/starterImages.ts:2
'/9j/4AAQSkZJRgABAQAASABIAAD/4QCARXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAWigAwAEAAAAAQAAAoAAAAA
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
src/maker/canvas/starterImages.ts:3
'/9j/4AAQSkZJRgABAQAASABIAAD/4QCARXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAWigAwAEAAAAAQAAAoAAAAA
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
src/maker/canvas/starterImages.ts:4
'/9j/4AAQSkZJRgABAQAASABIAAD/4QCARXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAWigAwAEAAAAAQAAAoAAAAA
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
src/maker/preview/builderSource.ts:5
'H4sIAAAAAAAAE+S9aXdbx7Uo+FdOpF5N0KZAyb7Jvc0Os+LIjq/ejS235eS91yQbDyJBCREJcAGgLIXNtSjLpEiJkzUP1GhNkSyS8iBxFP9LggMCn/IX3h6q6tR0AFCSc/utPk5s4pwad+3atfeuPYzsOjycHehL9eZzpcyJUnLo5K6OXbt/0T5cLLQfzubaM7njwdD
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
src/maker/uiEditor/web/vendor/yoga-layout/dist/binaries/yoga-wasm-base64-esm.js:13
function x(a){if(h.onAbort)h.onAbort(a);a="Aborted("+a+")";v(a);ha=!0;a=new WebAssembly.RuntimeError(a+". Build with -sASSERTIONS for more info.");ca(a);throw a;}function ua(a){return a.startsWith("da
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/__tests__/makerCliLogin.test.ts:37
token: 'tmpct_nQbEmrTTXkNIBWy1dOSf4I1A-vG3ra3e',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/__tests__/makerCliLogin.test.ts:71
token: 'tmpct_nQbEmrTTXkNIBWy1dOSf4I1A-vG3ra3e',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/__tests__/makerCliLogin.test.ts:82
text: async () => JSON.stringify({ token: 'tmpct_guidance_success' }),
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/__tests__/makerCliLogin.test.ts:109
text: async () => JSON.stringify({ token: 'tmpct_default_interval' }),
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
src/__tests__/makerMcpIssueReport.test.ts:189
'github_pat_abcdefghijklmnopqrstuvwxyz123456',
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
src/__tests__/makerMcpIssueReport.test.ts:236
expect(issue.body).not.toContain('github_pat_abcdefghijklmnopqrstuvwxyz123456');
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
clear_auth_data, clear_auth_data_raw
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.commitlintrc.cjs
.commitlintrc.cjs
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.docker
.env.docker
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.eslintrc.cjs
.eslintrc.cjs
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.lintstagedrc
.lintstagedrc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/maker/canvas/__tests__/videoPrompts.test.ts:15
const browserFactory = new Function('return (' + createVideoPrompts.toString() + ')()')();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 38e77230e982full audit observations/trust-audit/mcp-server/taptap__instant-games-open-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1238e77230e982BLOCKF43first audit
06

Questions

What is the @taptap/maker MCP server?

TapTap 小游戏开放能力 mcp

What tools does @taptap/maker expose?

67 in total: 48 read-only, 17 that write, and 2 that can delete or overwrite (clear_auth_data, clear_auth_data_raw). Every one is listed on this page with its risk.

Is @taptap/maker safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (43/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does @taptap/maker need?

It reads BUILD_CLIENT_SECRET, TAPTAP_MAKER_TAP_TOKEN_URL, TAPTAP_MCP_CLIENT_SECRET and TAPTAP_MCP_MAC_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @taptap/maker run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as taptap-mcp-proxy at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (38e77230e982), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement