mcp-elicitation-proxy

by robertocirillo

Not rated
GitHub

About

A transparent MCP proxy that adds elicitation for missing required tool arguments while preserving upstream tool discovery and schemas.

Details

Author
robertocirillo
Categories
Developer Tools, AI, Automation

Setup

Install mcp-elicitation-proxy in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/robertocirillo/mcp-elicitation-proxy

Follow the installation instructions in the repository README, then restart your MCP client.

A transparent MCP proxy that adds elicitation for missing required tool arguments while preserving upstream tool discovery and schemas.

mcp-elicitation-proxyis a standalone Python MCP proxy built on FastMCP. It preserves native upstream tool discovery while adding tool-call middleware for required-field elicitation and sensitive required-field blocking.

The core architectural rule is strict: upstream discovery stays native. The proxy must preserve upstreamtools/listoutput instead of replacing it with a synthetic wrapper such ascall_upstream_tool.

uvx mcp-elicitation-proxy --config config.yaml

For development from a local checkout, use the development setup steps below.

Build artifacts can be produced withuv build. Local outputs underdist/are not intended to be committed.

Exampleconfig.yamlwith an HTTP upstream:

proxy: name: "mcp-elicitation-proxy" upstream: url: "http://localhost:8001/mcp" elicitation: enabled: true fallback_on_unsupported: "structured_error" policies: schema_required: enabled: true sensitive_required: enabled: true tools: search_docs: required: - query - project elicit: message: "Provide the missing search details." fields: project: type: "string" description: "Project or scope to search."

Exampleconfig.yamlwith a command-based upstream:

proxy: name: "mcp-elicitation-proxy" upstream: command: "npx" args: - -y - "@modelcontextprotocol/server-everything"

upstream.urlandupstream.commandare mutually exclusive. Exactly one must be configured.upstream.argsdefaults to an empty list and is valid only withupstream.command. Command-based upstreams may also provide string environment variables withupstream.env.

uv run mcp-elicitation-proxy --config config.yaml

You can also provide the config path viaMCP_ELICITATION_PROXY_CONFIG.

When configuring an MCP client, usemcp-elicitation-proxyas the package and CLI command. The local MCP client server alias can be shorter; the recommended alias iselicitation-proxy.

{ "mcpServers": { "elicitation-proxy": { "command": "uvx", "args": [ "mcp-elicitation-proxy", "--config", "/path/to/config.yaml" ] } } }

In this example,elicitation-proxyis only the client-local server alias.mcp-elicitation-proxyremains the PyPI package name and CLI command. These names do not need to match. If desired, the proxy's own MCP server name can also be set separately in YAML:

proxy: name: "elicitation-proxy"

- Upstream tools remain visible in nativetools/list.
- The proxy does not register a genericcall_upstream_tool.
- Tool names are not prefixed with values such asupstream_.
- Tool names, descriptions, and input schemas remain the upstream values unless an explicit future discovery feature changes that contract.

The upstream server is delegated to FastMCP native proxying viafastmcp.server.create_proxy(...).

schema_requireduses native upstream JSON Schemarequiredfields. Per-tooltools.<tool_name>.requiredentries are added at runtime fortools/callvalidation only. Schema-required fields keep their original order, then configured fields are appended without duplicates.

Whenelicitation.enabledistrue, missing non-sensitive required fields may be requested with the client's MCP elicitation capability and merged into the original arguments before forwarding upstream. If elicitation is disabled, unsupported, declined, cancelled, or fails, the proxy returns a structured result instead of calling the upstream tool.

Thesensitive_requiredpolicy runs before normal required-field elicitation. If a missing required field appears to be a credential or secret, the proxy blocks form-mode elicitation and returns a structuredtool_call_blockedresult. Complete explicit input is still forwarded.

ambiguous_ifandconfirm_ifsettings are parsed for forward-compatible configuration, but advanced ambiguity, confirmation, and LLM-based policies are not implemented inv0.1.0.

A repeatable manual test is available with MCP Inspector and the official@modelcontextprotocol/server-everythingreference server.

npx @modelcontextprotocol/inspector -- uv run mcp-elicitation-proxy --config examples/manual-everything.config.yaml

This test verifies command-based upstream startup, native upstream tool discovery, forwarding, elicitation for missing required fields, sensitive-required blocking, andupstream.envpropagation.

- echois visible as an upstream tool;
- call_upstream_toolis not present;
- tool names are not prefixed withupstream_;
- callingechowith a completemessageis forwarded;
- callingechowithoutmessagetriggers elicitation;
- configured elicitation copy fromexamples/manual-everything.config.yamlis used;
- marking a missing required field as sensitive blocks elicitation;
- the configured environment variable is visible to the upstream environment tool.

Seedocs/manual-inspector-test.mdfor details.

v0.1.0is the first public-ready baseline. It includes a single-upstream FastMCP proxy, native discovery preservation, required-field elicitation, sensitive required-field blocking, command-based upstream startup, YAML configuration, and automated coverage for the main proxy invariants.

This is a web browser that enables your coding agent, such as Claude Code, to visit websites on your behalf and assist you in identifying bugs or creating UI test cases.

What Shopify did for ecommerce, Chipp does for AI agents. Build, deploy, and monetize AI agents for your business — no engineering team required.

CodeVF MCP lets AI hand off problems to real engineers instantly, so your workflows don’t stall when models hit their limits.

Client implementation for Mastra, providing seamless integration with MCP-compatible AI models and tools.

Agent-native developer Q&A API with MCP + A2A endpoints for citations, job pickup, and answer submission.

On-demand access to 150+ specialist AI agent templates — search, browse, and spawn agents. 150x reduction in context usage vs loading agents locally.

AgentChatBus is a persistent AI communication bus that lets multiple independent AI Agents chat, collaborate, and delegate tasks — across terminals, across IDEs, and across frameworks.

Remote MCP server (Streamable HTTP) at https://mcp.agenticrail.nz/ — deterministic step-order enforcement for AI agents. evaluate_step returns ALLOW or DENY before a step runs; verify_receipt proves a sequence's Ed25519-signed, hash-chained receipt chain is intact. No auth required: omit the bearer token and calls run on the public demo key. That first clause matters — the form has no "remote/hosted" field, and putting the endpoint in the description is the convention on that list ("Fully REMOTE! Just use…"). The rest mirrors your own server card verbatim, so the listing and the card can't drift.

An AI Agent with optional Human-in-the-Loop Safety and Model Context Protocol (MCP) integration.

Agent Mail Rooms is a paid remote MCP endpoint for OpenAI Codex agent coordination MCP. It exposes structured JSON tools, a public server card, token-based access, usage receipts, and audit-

MCP bridge that lets Claude Code delegate heavy tasks to the Antigravity CLI (agy) — purpose-built tools, model routing with fallback, session continuity, and output truncation to save Claude's context and tokens.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.