Skip to content

Remote MCP docs show API key in URL query string #334

Description

@EmersonZh

Hi Exa team,

While testing MCP server security and quality checks, I noticed that the README includes a remote MCP example that places the API key in the URL query string:

https://mcp.exa.ai/mcp?exaApiKey=YOUR_KEY&tools=web_search_exa,web_search_advanced_exa,web_fetch_exa

Reference:

Why this matters

Query-string secrets are easy to leak through shell history, client logs, proxy logs, browser history, screenshots, and support bundles. For MCP configs, this can also be copied between tools and stored in plain config files.

Suggested change

If supported, the docs could prefer one of these patterns:

  • Authorization header;
  • MCP client secret/env field;
  • local stdio config with EXA_API_KEY;
  • or a warning that query-string auth is convenient but less safe and should be avoided for shared or logged environments.

One additional schema-level lint finding: in the dynamic tool schema for web_fetch_exa, urls.items is currently a plain string. Since this tool fetches URLs, adding format: "uri" would make client-side validation clearer.

mcp-lint context

V0 of mcp-lint is ready at https://github.com/agentsnative/mcp-lint. It is a CI linter for MCP servers that checks installability, tool schemas, annotations, secret handling, and high-risk tool configuration. Secret-in-query-string examples and URL schema precision are exactly the kinds of docs/schema checks mcp-lint is designed to catch automatically.

Would you be interested in trying the V0 mcp-lint report for this repo? I would be happy to run it against the server and share the output in an issue or PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions