ApproveKit
Server Details
Audit apps against App Store, Google Play and Google OAuth review rules; get the required docs.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- yateshaw/approvekit
- GitHub Stars
- 0
- Server Listing
- ApproveKit
TDQS
Scored across 4 tools
Each tool has a clearly distinct role: audit_app (pre-submission audit), create_checkout (payment link), get_order (payment status + document retrieval), and publish_document (finalize/host documents). The create_checkout/get_order pair is workflow-coupled but the verbs clearly separate creation from retrieval, leaving little real ambiguity.
All four tools follow a consistent verb_noun pattern (audit_app, create_checkout, get_order, publish_document) with uniform snake_case and no mixing of conventions.
Four tools is well-scoped for a focused compliance-and-documentation service, with each tool mapping to a distinct step in the workflow rather than padding the surface.
The surface covers the core lifecycle: audit the app, pay, retrieve generated documents, and publish finalized versions. Minor gaps exist (no way to list or manage multiple previously created apps without the stored token), but core workflows are covered.
Available Tools
4 toolsaudit_appAudit an app for store and Google OAuth reviewAInspect
Use before submitting a mobile or web app to the Apple App Store, Google Play or Google OAuth verification. Pass an inventory of what the app collects, which SDKs it uses and which Google scopes it requests (build it by reading the repo). Returns the problems reviewers are likely to reject, how to fix each one, and which paid package generates the missing documents. Free. The first call returns an app_token: save it in .approvekit.json at the project root and pass it on later calls so the app is updated instead of duplicated.
| Name | Required | Description | Default |
|---|---|---|---|
| app_token | No | The app_token returned by audit_app. It is stored in .approvekit.json at the project root. Omit on the first audit of an app. | |
| inventory | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare safety flags (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description adds real value: it discloses that the first call mints an app_token, that omitting the token duplicates the app, that the audit is free, and that paid packages are cross-sold. The duplication behavior is consistent with idempotentHint=false. It doesn't state auth/permission requirements for the tool itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the when-to-use trigger, then output value, then the token mechanics. Four sentences, each doing distinct work; slightly dense but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so the description's summary of returns (likely-rejected problems, fixes, which paid package produces missing documents) is necessary and present, as is the token persistence workflow. It omits any mention of rate limits, auth, or error behavior, which are secondary here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 2 params at 50% schema coverage, so the description must carry weight. It explains app_token lifecycle (first call returns it, save to .approvekit.json, pass on later calls) beyond the schema's own note, and summarizes what the inventory object should contain. It doesn't enumerate the required inventory fields, leaving that to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (audit an app for App Store / Play / Google OAuth review) and the exact trigger for running it. Siblings (create_checkout, get_order, publish_document) are unrelated domains, so no differentiation is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit about when to use it ('before submitting... to the Apple App Store, Google Play or Google OAuth verification') and how to prepare the inventory by reading the repo. No when-not guidance or named alternatives, which is a minor gap given no sibling overlaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_checkoutCreate a payment link for a ApproveKit packageAInspect
Creates a Stripe Checkout link for one app. Only call this after the user agreed to the purchase. Show the link to the user so they can pay; then call get_order with the returned order_id to receive the documents.
| Name | Required | Description | Default |
|---|---|---|---|
| product | Yes | launch_pass (US$49) or oauth_pack (US$249). | |
| app_token | Yes | The app_token returned by audit_app. It is stored in .approvekit.json at the project root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply the safety profile (readOnlyHint=false, idempotentHint=false, openWorldHint=true, destructiveHint=false), so the description only needs to add context. It does: it discloses a human-in-the-loop prerequisite (user consent) and the fact that the return payload contains an order_id used by a follow-up tool. It does not mention that repeat calls would create additional links, which is the one notable gap given idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the precondition, then the follow-up. Every sentence carries distinct operational information with no restatement of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the returned order_id and the tool that consumes it. The consent prerequisite and payment-display step round out the call contract, though link format/expiry and re-call behavior are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enum values with prices are fully documented in the schema itself. The description adds only the implicit notion that app_token is per-app ('for one app') and no format or sourcing detail beyond what audit_app/.approvekit.json already states. Baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a Stripe Checkout link for one app') and is immediately distinguishable from audit_app, get_order, and publish_document. The scope ('for one app') also signals it operates on a single app_token rather than bulk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('Only call this after the user agreed to the purchase') and a concrete downstream workflow ('Show the link to the user so they can pay; then call get_order with the returned order_id'). It names the sibling to call next and the data to pass, which is exactly the routing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderGet an order's status and its documentsARead-onlyIdempotentInspect
Returns the payment status of an order. Once paid, returns every generated document as Markdown plus the public URLs of the hosted privacy policy and account deletion pages, ready to paste into App Store Connect, Play Console or the Google OAuth consent screen.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | The order_id returned by create_checkout. | |
| app_token | Yes | The app_token returned by audit_app. It is stored in .approvekit.json at the project root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond that: the response is conditional on payment state ('Once paid, returns every generated document'), which tells the agent the document payload can be absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler; the primary return (payment status) is front-loaded and the conditional document payload follows. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing returns, which it does concretely (status, Markdown documents, hosted policy/deletion URLs). Combined with full schema coverage for inputs and annotations for the safety profile, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 2 parameters at 100% schema description coverage, the schema already explains both order_id and app_token, including their provenance. The description adds no parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the payment status of an order') and expands on the secondary payload (generated documents plus hosted URLs). The 'order' resource is unique among the siblings audit_app, create_checkout, and publish_document, so an agent can route to it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is useful by naming the consumption targets ('ready to paste into App Store Connect, Play Console or the Google OAuth consent screen'), which gives genuine downstream context. However, it never states when to call this versus create_checkout or publish_document, nor any prerequisite like needing an order_id from a prior checkout.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_documentPublish the final text of a generated documentAIdempotentInspect
Saves the final version of a document after every [CONFIRM: ...] placeholder has been resolved with the user. For privacy-policy and account-deletion this makes the hosted page live at its public URL; for the other kinds it just stores the final text. Call it again whenever the text needs an update (for example after the app adds a new data type).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| markdown | Yes | The complete final document in Markdown (headings, lists, bold and links only). | |
| app_token | Yes | The app_token returned by audit_app. It is stored in .approvekit.json at the project root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover idempotency and non-destructiveness; the description adds the material side effect that privacy-policy and account-deletion kinds make a hosted page live at a public URL, while other kinds merely store text. That public-exposure consequence is exactly the kind of behavior an agent cannot infer from the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences: the core action and precondition first, then the kind-dependent effect, then the update trigger. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no output schema, it covers precondition, side effects, and repeat-call semantics. It omits error/failure behavior and whether an already-published document can be retracted, which keeps it short of full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (app_token and markdown are documented, kind is an undescribed enum). The description compensates by explaining what the kind values actually do behaviorally and by implying markdown must be the finalized text with placeholders resolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Saves the final version of a document') and then refines it by kind, so an agent knows exactly what changes state. Siblings (audit_app, create_checkout, get_order) are unrelated, so no differentiation is required.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition (every [CONFIRM: ...] placeholder resolved with the user) and an explicit re-invocation rule ('Call it again whenever the text needs an update'). It does not name an alternative tool, but no sibling overlaps this function, so the omission is low-cost.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
audit_app - First observed
create_checkout - First observed
get_order - First observed
publish_document
Related MCP Connectors
Compliance & security scan for your app: secrets, exposed files, headers, privacy, AI-disclosure.
Audit any App Store or Google Play listing: measured ranks, keyword gaps, draft copy. Read-only.
One-step legal compliance for vibe-coded apps: privacy, terms, cookie banner and EU AI Act check.
HIPAA compliance AI agent — scan, grade, SRA, and generate compliance docs.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceApple App Store Pre-Flight Guideline Auditor & Privacy Manifest Generator15 npmMIT
- AlicenseAqualityAmaintenanceOne-step legal compliance for vibe-coded apps: scans project, generates privacy policies/TOS, installs cookie consent banner, and checks EU AI Act risk.1082 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables automated ingestion of App Store/Play Store reviews, synthesis of themes and actions, and publishing to Google Docs and Gmail drafts via Google Workspace MCP.-
- AlicenseNot gradedqualityDmaintenanceThe only Multi-LLM Compliance Engine (GPT-4o + Claude + DeepSeek). Auto-fix GDPR/LGPD risks and more 15 frameworks. code.guard.eu6 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.