GoMobSec MCP server
You can use this MCP server to run and manage GoMobSec security scans for Android and iOS apps from an MCP client.
Check the connected GoMobSec account/plan (
whoami) and monthly scan usage (get_usage).List recent scans and inspect a scan's status and severity counts (
list_scans,get_scan).Upload local
.apk,.xapk,.apks,.apkm, or.ipapackages and startquick,static, orfullscans (start_scan).Wait for scans to finish with progress updates (
wait_for_scan).Retrieve findings with severity, CWE, MASVS, CVSS, location, and description; filter by severity and optionally include false positives (
get_findings).Download reports as DOCX, XLSX, JSON, or SARIF into the configured download folder (
download_report).Use the
security_reviewprompt to turn a completed scan into a prioritised fix plan.
Enables scanning Android app packages (.apk, .xapk, .apks, .apkm) for security issues and retrieving findings with severity, OWASP MASVS category, CWE, CVSS, location, and descriptions.
Enables scanning iOS app packages (.ipa) for security issues and retrieving findings with severity, OWASP MASVS category, CWE, CVSS, location, and descriptions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GoMobSec MCP serverScan ./build/app-release.apk and tell me what to fix first"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GoMobSec MCP server
The official Model Context Protocol server for GoMobSec. Use it to scan Android and iOS apps for security issues from Claude, Cursor, VS Code or any other MCP client. Results are mapped to OWASP MASVS, CWE and CVSS, and you can download the full pentest-style report.
You: Scan ./build/app-release.apk and tell me what to fix first.
AI: start_scan → wait_for_scan → get_findings → a prioritised fix planUse it in Claude without installing anything
GoMobSec also runs this server for you at https://mcp.gomobsec.ai/mcp. In
Claude, go to Settings → Connectors → Add custom connector, enter that URL,
and sign in with your GoMobSec account (available on every paid plan). Setup,
tools, security and privacy are covered in docs/HOSTED.md.
The rest of this page is about the local server, which reads apps straight from your disk and authenticates with an API key.
Related MCP server: agentguard
Requirements
A GoMobSec account with an API key. Create one under API keys in GoMobSec. API keys come with every paid plan (Individual and up).
uv(recommended) or Python 3.10+.
Install
The server runs locally over stdio. Your API key stays on your machine, and the server reads the APK or IPA straight from disk.
Claude Code
claude mcp add gomobsec --env GOMOBSEC_API_KEY=your-key -- uvx gomobsec-mcpClaude Desktop, Cursor, Windsurf and others
Add this to the client's MCP config file. For Claude Desktop that is
claude_desktop_config.json; for Cursor it is ~/.cursor/mcp.json.
{
"mcpServers": {
"gomobsec": {
"command": "uvx",
"args": ["gomobsec-mcp"],
"env": { "GOMOBSEC_API_KEY": "your-key" }
}
}
}VS Code
Add this to .vscode/mcp.json. VS Code asks for the key on first use and
stores it securely:
{
"inputs": [
{ "type": "promptString", "id": "gomobsec-key", "description": "GoMobSec API key", "password": true }
],
"servers": {
"gomobsec": {
"command": "uvx",
"args": ["gomobsec-mcp"],
"env": { "GOMOBSEC_API_KEY": "${input:gomobsec-key}" }
}
}
}Without uv, run pip install gomobsec-mcp and use gomobsec-mcp as the command.
Tools
Tool | What it does |
| The account and plan the key belongs to |
| Scans used this month against the plan limit |
| Recent scans, newest first |
| Status of one scan and, once it is complete, the findings count by severity |
| Findings with severity, CWE, MASVS category, CVSS, location and description. Can filter by severity; false positives are hidden unless asked for |
| Uploads a local |
| Waits for a scan to finish and reports progress meanwhile |
| Saves the DOCX, XLSX, JSON or SARIF report to your download folder |
There is also one prompt, security_review, which turns a finished scan into
a prioritised fix plan.
Scans you start here count against your GoMobSec plan, exactly like scans from the web app or CI. The scan modes and limits are the ones your plan allows.
Configuration
Variable | Default | |
| — | Required. Your GoMobSec API key |
|
| The only folder |
|
| Change this only for a dedicated or on-prem GoMobSec |
|
| Base URL for the report links |
Security
Your key stays local. It is read from the environment and only ever sent to GoMobSec over HTTPS. It is never written to a file or included in tool output.
Uploads are limited to app packages.
start_scanonly sends files that are mobile app packages: the right extension, a zip archive, and at most 250 MB. It cannot be used to upload any other file from your machine.Downloads never overwrite.
download_reporttakes no path. It writes new files (mode0600) intoGOMOBSEC_DOWNLOAD_DIRand never replaces an existing file.Finding text is treated as untrusted. Titles and descriptions can contain strings from the scanned app, and an app author controls those. The server strips control and bidi characters, keeps the text inside a fenced data block, and tells the model to treat it as data. Still, review what your assistant does after reading the results of a scan of an app you don't trust.
Access is limited to your own scans. The key only sees scans on its own account or organisation. Revoke it in GoMobSec at any time.
To report a vulnerability, see SECURITY.md.
Privacy
The local server keeps nothing. It reads your API key from the environment, sends requests only to GoMobSec, and writes only the reports you ask for. What GoMobSec does with the apps you scan is in the GoMobSec privacy policy. For the hosted connector, see its privacy policy.
Development
python -m venv .venv && . .venv/bin/activate
pip install -e ".[test]"
pytestTry it with the MCP Inspector: npx @modelcontextprotocol/inspector gomobsec-mcp.
The hosted connector's tests (tests/test_hosted.py) run a real HTTP server on a
free port and go through the whole OAuth flow, with GoMobSec's side faked.
Releasing
Bump the version in
src/gomobsec_mcp/__init__.pyand bothversionfields inserver.json(the tests and the release workflow check they match), and add aCHANGELOG.mdentry.Publish a GitHub release tagged
vX.Y.Z. ThePublishworkflow tests and builds it, uploads it to PyPI (Trusted Publishing), then lists it in the MCP Registry (GitHub OIDC). No tokens are stored in the repository.
License
MIT
Available Tools
8 toolsdownload_reportDownload reportAInspect
Download the full report of a completed scan — DOCX (pentest report), XLSX, JSON or SARIF (for code-scanning tools) — into the GoMobSec download folder (GOMOBSEC_DOWNLOAD_DIR, default ~/Downloads/gomobsec). Never overwrites an existing file. Returns the saved path.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | docx | |
| scan_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it explains that the operation writes into a local download folder, identifies the controlling environment variable and default location, and guarantees that an existing file will never be overwritten. It also states that the saved path is returned, giving the agent useful workflow and filesystem context.
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?
The action, scan prerequisite, and formats are front-loaded, followed by concise destination, collision-safety, and return-value details. Every clause provides practical information without repetition or unnecessary background.
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 simple two-parameter download tool, the description covers the essential precondition, output formats, storage location, configurability, overwrite behavior, and result. The output schema can handle further return-value details, leaving only minor workflow omissions such as how to discover a suitable scan_id.
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 0% schema description coverage, the description usefully explains that the scan must be completed and gives semantic guidance for DOCX and SARIF among the format choices. It does not explain where to obtain scan_id or provide comparable context for XLSX and JSON, so it does not fully compensate for the undocumented 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?
The description uses a specific verb and resource—downloading the full report for a completed scan—and identifies the supported report formats. This clearly distinguishes it from siblings such as get_scan, which retrieves scan information, and get_findings, which retrieves findings rather than a full report artifact.
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?
Requiring a completed scan gives a clear precondition, while the DOCX and SARIF notes help users choose formats for pentest and code-scanning reports. It does not explicitly direct agents to list_scans or get_scan for obtaining or validating a scan_id, nor name alternatives for retrieving scan metadata or findings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_findingsScan findingsARead-onlyInspect
Findings of a completed scan: severity, title, CWE, MASVS category, CVSS, location and description, most severe first. Optionally filter by severity. False positives are left out unless include_false_positives is true.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| scan_id | Yes | ||
| severity | No | ||
| include_false_positives | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description is not carrying the safety burden. It still adds real behavioral detail beyond them: results are ordered most-severe-first, and false positives are excluded unless include_false_positives is true. It does not mention truncation or result-size limits, which keeps it from a 5.
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 dense sentences, front-loaded with what is returned and immediately followed by the filtering behavior. Every clause (field list, ordering, severity filter, false-positive default) carries information an agent needs, with 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?
An output schema exists, so the description needn't detail return values, yet listing the key fields is a helpful preview. For a four-parameter read tool with annotations, the only real gap is the undocumented limit/pagination behavior.
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 0%, so the description must carry parameter meaning, and it does explain severity as an optional filter and clarifies the default semantics of include_false_positives. The limit parameter (default 50) is never mentioned, leaving the agent unaware of truncation or pagination behavior for a potentially large finding set.
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?
The description names a specific resource (findings of a completed scan) and enumerates the returned fields (severity, title, CWE, MASVS, CVSS, location, description), which clearly separates it from get_scan or list_scans. It lacks an explicit verb ("List"/"Retrieve") and never names a sibling tool, so it stops short of the top mark.
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?
"Completed scan" implies the scan must have finished, which usefully steers an agent toward wait_for_scan first, and the severity filter plus the false-positive default are stated. However, there is no explicit when-to-use versus alternatives such as download_report for full reports, and no stated behavior when the scan is still running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scanScan statusBRead-onlyInspect
Status of one scan and, once complete, its findings count by severity.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful behavior: the findings count only materializes after the scan completes, implying a partial result before then. It says nothing about rate limits, polling intervals, or error behavior for an unknown scan_id.
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?
One front-loaded sentence with no filler; the conditional clause is compact and informative. Slightly terse for the information an agent needs.
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?
An output schema exists, so return structure need not be spelled out, and the description correctly previews the severity breakdown. However, for a status-polling tool in a suite containing wait_for_scan and get_findings, the absence of any guidance on provenance of scan_id or when to poll versus wait leaves a meaningful hole.
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 0%, so the description carries the full burden for the single parameter, and it says nothing about scan_id — not its format, not that it comes from list_scans or start_scan. With one required undocumented parameter, this is a real gap rather than a neutral baseline.
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 resource (one scan) plus what it returns (status and, once complete, findings count by severity), which cleanly separates it from list_scans. It does not explicitly name a sibling as an alternative, so it stops short of a 5.
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 phrase 'once complete' hints at polling semantics, but there is no when-to-use guidance, no mention of wait_for_scan for blocking on completion, and no note that get_findings is the tool for detailed findings. The agent must infer all routing decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usagePlan usageBRead-onlyInspect
How many scans the account has used this month against its plan limit.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds useful scope — a monthly window and a comparison against the plan limit — but does not clarify whether 'this month' means the calendar month or a billing cycle, nor whether the count includes in-flight scans.
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?
A single well-formed sentence with no filler, and the key scope (this month, plan limit) appears immediately. Slightly terse given the ambiguity around the accounting period.
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 an output schema present and no parameters, the description only needs to convey what the number represents, which it does. The remaining gap is definitional (calendar month vs. billing period, treatment of pending scans), which an agent may need to infer.
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?
The tool takes zero parameters, so the description has nothing to disambiguate; the baseline of 4 applies. It correctly implies the account context is implicit rather than passed in.
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?
The description clearly states the resource (scan usage) and the comparison being made (used this month vs. plan limit), which distinguishes it from list_scans and get_scan. It lacks an explicit verb, but the intended output is unambiguous.
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?
There is no guidance on when to call this versus siblings such as list_scans (which reports individual scans) or whoami (account identity). The agent must infer that this is a quota/limit check rather than a scan listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scansList scansARead-onlyInspect
List the account's most recent scans, newest first (1-50).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so safety and scope are covered. The description adds only the sort order and the limit range; it says nothing about what happens with no scans, whether results are cached, or how the open-world account scope affects results.
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?
A single sentence with no filler, and the scoping constraint ('most recent ... newest first') is front-loaded before the limit range. Nothing is redundant.
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?
One optional parameter, an output schema, and read-only annotations make this a simple tool, and the description covers scope, ordering, and limit bounds adequately. The only missing piece an agent would want is the default page size of 10 when limit is omitted.
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 0% — the limit property has no description, no minimum, and no maximum in the schema. The description's '(1-50)' supplies the valid bounds that the schema omits, which is real added value. It does not state the default of 10, so it does not fully compensate for the coverage gap.
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?
The description gives a specific verb (list) and resource (the account's most recent scans), plus ordering ('newest first'), which distinguishes it from the singular get_scan sibling. It stops short of naming that sibling explicitly, but 'list ... scans' versus 'get_scan' is unambiguous.
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?
'Most recent scans' implies the usage context (browsing recent activity rather than fetching a known scan), but there is no explicit when-to-use statement, no exclusion of get_scan for single-scan retrieval, and no mention of whether pagination or a different tool is needed for older scans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_scanStart a scanAInspect
Upload a local Android (.apk, .xapk, .apks, .apkm) or iOS (.ipa) app to GoMobSec and start a security scan. Uses one scan from the account's plan — confirm with the user first. 'quick' and 'static' work on every plan; 'full' (static + dynamic) needs a paid plan. Returns the scan id; follow it with wait_for_scan.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| scan_mode | No | quick | |
| project_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state non-readOnly, openWorld, non-idempotent, non-destructive. The description adds the quota consumption (one scan from the plan), the required user confirmation, plan-tier constraints for 'full', and the returned scan id — behavior an agent cannot infer from the annotations.
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 purpose, then formats, then cost warning, then return/next step — every sentence carries information. Minor waste from the awkward line break mid-sentence, 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?
Covers input formats, mode constraints, cost side effects, and the next tool to call; with an output schema present, it needn't describe the response, and mentioning the scan id is sufficient. Nothing material is missing for correct invocation.
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 0%, so the description must carry parameter meaning. It explains scan_mode tiers ('quick'/'static' on every plan, 'full' needs paid) and implicitly the file_path formats, but never mentions project_name, leaving one of three parameters undocumented anywhere.
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 ('Upload ... app ... and start a security scan') and enumerates accepted formats (.apk, .xapk, .apks, .apkm, .ipa), clearly separating it from read-only siblings like get_scan and list_scans.
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 explicit preconditions ('Uses one scan from the account's plan — confirm with the user first'), plan gating per mode, and names the follow-up tool ('follow it with wait_for_scan'), which is exactly the routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_scanWait for a scanARead-onlyInspect
Wait until a scan finishes (or the timeout passes, 1-60 minutes), reporting progress, then return its status and findings count. Scans can take longer than one wait; call it again if the scan is still running.
| Name | Required | Description | Default |
|---|---|---|---|
| scan_id | Yes | ||
| timeout_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: it blocks, has a 1-60 minute timeout window, reports progress, and may need to be called repeatedly for long scans. It does not say what happens to partial results or whether the wait is server-side or polling.
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. The core behavior and its key caveat (repeat calls) are both front-loaded with 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?
An output schema exists, so return details need not be described, and the description still names the two returned values. Given the blocking/repeat semantics, the description covers everything an agent needs to invoke it correctly, short of distinguishing it from get_scan.
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 0%, so the description compensates usefully by stating the 1-60 minute range for timeout_minutes, which the schema only shows as a default of 60 with no min/max. scan_id is self-evident and needs no elaboration.
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 ('wait until a scan finishes') and resource ('scan'), plus what it returns (status and findings count). It implicitly separates itself from the immediate-return sibling get_scan, though it never names that sibling explicitly.
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 clear when-to-use context ('wait until a scan finishes') and an important repeat pattern: 'call it again if the scan is still running.' It does not explicitly contrast with polling via get_scan, which is the main alternative an agent has.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWho am IARead-onlyInspect
Show which GoMobSec account is connected and its plan.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the result scopes to the connected account and its plan, which helps the agent interpret the response. It does not discuss behavior when unauthenticated or what failure looks like, so it adds only moderate context.
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?
A single short sentence that front-loads the action and the returned resource. There is no filler, hedging, or restatement of the title.
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 an output schema present and no parameters, the description needs only to establish what the call is for, which it does. It could add one clause about authentication or failure behavior, but nothing essential for correct invocation is missing.
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?
The tool takes no parameters and the schema is an empty object with full coverage, so there is nothing for the description to clarify. Baseline of 4 applies, and the description correctly avoids inventing parameter details.
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?
The description states a specific verb and resource: showing which GoMobSec account is connected plus its plan. That is unambiguous and clearly distinct from scan/usage siblings. It stops short of explicitly contrasting with any sibling, but no agent could confuse this with list_scans or get_usage.
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 intended situation is implied, checking identity and subscription plan, but there is no explicit when-to-use or when-not-to-use guidance. For a zero-parameter utility tool the omission is minor, yet the description does not route the agent to alternatives such as get_usage for quota questions.
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.
1 tool update
v0.2.1- Changed
wait_for_scan1 field changed- changed
Input schema / properties / timeout_minutes / defaultPrevious value: -20New value: +60
8 tool updates
v0.1.0- First observed
download_report - First observed
get_findings - First observed
get_scan - First observed
get_usage - First observed
list_scans - First observed
start_scan - First observed
wait_for_scan - First observed
whoami
TDQS
Scored across 8 tools
Each tool targets a distinct action/resource: account identity, usage, scan listing, individual scan status, findings, waiting, starting scans, and report download. The only potentially neighboring tools—get_scan, wait_for_scan, and get_findings—are clearly differentiated by description: status polling versus blocking wait versus detailed findings.
Most names follow a clear snake_case verb_noun pattern (get_scan, list_scans, start_scan, download_report). The only deviation is 'whoami', which is a well-known conventional command but not part of the same pattern.
Eight tools is well-scoped for a focused mobile security scanning service. Each tool has a clear role in the scan lifecycle and there is no obvious filler.
The surface covers account checks, scan creation, waiting, status/findings retrieval, and report download, forming a complete core workflow. Minor gaps exist, such as scan cancellation or deletion, but these are not necessary for the main lifecycle.
Maintenance
Related MCP Connectors
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Security, SEO and AI-visibility scanner for web apps · free scans and focused checks via MCP.
Compliance & security scan for your app: secrets, exposed files, headers, privacy, AI-disclosure.
Scans remote MCP servers for protocol, security, and TLS issues; exposes scan tools via MCP.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAutomatically discovers and tests MCP services for security vulnerabilities including command injection, SQL injection, SSRF, path traversal, and sensitive data exposure with detailed reports and remediation guidance.1-
- AlicenseNot gradedqualityCmaintenanceEnables scanning of AI agent code for security vulnerabilities such as prompt injection, tool abuse, and data exfiltration, directly from MCP-compatible clients like Claude Code.83 PyPI3LGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables security scanning of source code and Apple configuration files, providing evidence-based findings, explanations, remediation plans, threat modeling, and knowledge base access through MCP tools.MIT
- FlicenseBqualityCmaintenanceEnables local-first static and optional controlled dynamic analysis of Android APK artifacts, with provenance-aware downloads, Markdown reports, and structured security findings via MCP stdio tools.9-