Elicitation Auditor

io.github.GuardBeePublished by GitHub account GuardBeev0.3.1Updated Nov 3, 2026

MCP elicitation anti-patterns: secrets in forms, third-party authorize URLs, credentials in URLs

VerifiedSTDIODesktop onlyDeveloper ToolsSecurity & Monitoring

Overview

AI-generated overview

Statically scans MCP server source code for elicitation anti-patterns such as secrets in forms, third-party authorize URLs and credentials in URLs.

What you can do
  • Scan a source string, a single file or a whole directory recursively for elicitation anti-patterns
  • Detect form-mode requests for secrets, clickable links in forms, and third-party authorize URLs
  • Flag credentials or personal data in elicitation URLs, cleartext HTTP, form answers used as identity, and ignored decline or cancel results
  • List every elicitation check the auditor runs
When to use it
Useful when you build or review MCP servers that use elicitation and want a quick static check that they follow the 2026-07-28 spec's separation of form and URL modes before shipping.
Requirements
Runs as a local stdio process, installed from the npm package; Node.js and npx are needed. No API key, no authentication and no declared environment variables; analysis is static only.
Before you install
Telemetry is off by default; setting GUARDBEE_TELEMETRY=1 sends server, tool, success, duration and short parameter values such as file paths to a third party, with longer strings and fields like content, token or password replaced by a placeholder. Scans read your source files.

Installation

In SourceWeft

  1. Open Elicitation Auditor in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@guardbee/mcp-elicitation-auditor

🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch

[npm version] [npm downloads] [License: MIT]

An MCP server that scans MCP server source for elicitation anti-patterns in the 2026-07-28 specification.

That revision deprecated sampling and roots. Elicitation is the remaining way a server asks the client for something. Form mode collects structured data through the client. URL mode sends the user to a page the client must not read. The spec draws a hard line between them.

Telemetry is off by default. With GUARDBEE_TELEMETRY=1 it sends the server, tool, success, duration and short parameter values such as a file path; longer strings and fields like content, token or password are replaced with a placeholder. See @guardbee/mcp-telemetry.

Claude ──► elicitation-auditor ──► MCP server source              │              ├─ form-secrets   (form mode asks for a password, API key, token, or card, or embeds a link)              ├─ url-binding    (URL mode opens a third-party /authorize endpoint directly)              ├─ url-exposure   (credential or email embedded in the elicitation URL)              ├─ transport      (cleartext http URL outside localhost)              ├─ identity       (a form answer is treated as who the user is)              └─ completion     (the result is used without checking decline or cancel)

What it flags

  • Form-mode secrets. elicitInput / ctx.elicit / elicitation/create with mode omitted or form, whose schema asks for password, apiKey, access_token, cvv, and the same family. A name and email form is allowed by the spec and is not flagged. secretQuestion is not treated as secret.
  • Direct third-party authorize. URL mode whose url path contains authorize, oauth, or oauth2, unless the path goes through your own /connect route. That is the forwarded-link phishing case in the spec: the user who opens the link must be checked against the MCP user before any redirect.
  • Credential or personal data in the URL. Query keys such as access_token, code, or email. The URL is shown to the MCP client.
  • Cleartext HTTP, except localhost and 127.0.0.1.
  • Clickable URL in a form. A form message or field description that contains an http link. The spec says that link belongs in URL mode.
  • Form answer used as identity. The submitted email or username is passed to findUser, loginAs, or assigned to req.user, with no comparison to the token sub claim.
  • Ignored decline/cancel. Code reads .content and never looks at .action, decline, or cancel. Checking action !== "accept" is enough. Sending the email as a notification address is not treated as an identity check.

Tools

ToolPurpose
scan_textScan a source string
scan_fileScan one file
scan_directoryRecursive scan
list_patternsList the checks

CLI

npx @guardbee/mcp-elicitation-auditor scan <path> [--fail-on=any] [--format=text|json|sarif]

guardbee.yml:

yaml
elicitation-auditor:  fail-on: high  max-files: 5000  exclude:    - ".test.ts"

No API key. Static analysis only.

Feedback

Questions, ideas, or a false positive? Start a thread in GitHub Discussions or open an issue. If GuardBee is useful to you, a ⭐ on the repository helps others find it.

Source: packages/elicitation-auditor/README.md at commit bc5997d

Tools

4

scan_text

Scan MCP server source for elicitation anti-patterns from the 2026-07-28 spec: form mode requesting secrets or embedding a link, URL mode opened directly on a third-party authorize endpoint, credentials in the elicitation URL, a form answer used as the user's identity, and a result used without checking decline or cancel.

Parameterslabelcontentrequired

scan_file

Scan a single file for elicitation anti-patterns

Parameterspathrequired

scan_directory

Recursively scan a directory of MCP server source for elicitation anti-patterns

ParameterspathrequiredexcludeincludemaxFiles

list_patterns

List every elicitation check this auditor runs

Takes no parameters.

Version history

3
  1. v0.3.1LatestOct 30, 2026
  2. v0.2.2Oct 22, 2026
  3. v0.1.2Oct 13, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts