What you need
- A Valkyrie MCP API key (prefixed
vk_mcp_), created on the API Keys screen for the environment you want to operate. - Your API base URL (e.g.
https://valkyrie-back.azumo.com).
Connection details that matter
The Valkyrie MCP endpoint has two specifics that trip people up: The endpoint URL itself carries no credentials:An
?api_key= query parameter on the URL still works as a legacy fallback for
existing clients. Avoid it for new setups. URLs are routinely written to server,
proxy, and client logs, which exposes the key. When both a header and a query
key are present, the header wins.server_info work. Every tool that reads or changes your resources
returns “No API key configured.”
Keep the key out of committed config files. Where your client supports it, source
the header value from an environment variable or secret store.
Claude Code
Pass the key with--header:
claude mcp list to confirm it’s connected.
Claude Desktop
Claude Desktop’s config file only accepts servers launched with a command (stdio), not a bare remoteurl. If you add a "url" entry, the app silently drops it and its
log shows “Skipped invalid MCP server config entries: valkyrie”. Bridge the remote
Valkyrie endpoint with mcp-remote, a small
stdio-to-HTTP bridge that npx downloads from npm on first run.
This path needs Node.js installed (it provides
npx). It’s the same Node runtime
your other command-based MCP servers already use.- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
mcpServers. Use mcp-remote’s --header flag to send the key,
and reference it from env so the header value contains no spaces:
env only feeds the ${VALKYRIE_MCP_KEY} placeholder in the --header
argument. mcp-remote sends the actual header to Valkyrie.
Fully quit Claude Desktop (Cmd+Q on macOS, not just close the window) and reopen it.
Valkyrie then appears in your tools list. If it doesn’t, check the log for a
Skipped invalid MCP server config entries line to confirm the entry is being read.
Cursor
Add Valkyrie to Cursor’smcp.json with the streamable-HTTP URL and a headers
block:
Verify it works
Connecting is not the same as being authenticated.server_info reporting that a key
was supplied does not mean the key is valid. To confirm, call a data tool such
as list_deployments:
- Valid key → returns your deployments.
- Invalid key → returns
{"error": "Invalid API key"}.
Keys are per-environment. An MCP key from one environment returns
Invalid API key against another. Issue the key from the dashboard of the
environment you intend to operate.
Troubleshooting
Tools report “No API key configured”
The Valkyrie server didn’t receive a key on that request. Check the following:- Your client sends
X-API-KeyorAuthorization: Beareras a request header, not just on the initial connection. - You haven’t only set the key in the client’s
envblock. For a remote server,envalone doesn’t send anything to Valkyrie. It only helps when a header argument references it, as in the Claude Desktop example above. - You aren’t relying on a key configured on the Valkyrie server. Remote requests never inherit it.