MCP server has a url but no type in Claude Code: fix the entry

Claude Code skips an MCP entry that has a url and no type. Add type http to the Sume entry you copied from Cursor, then sign in and check the connection.

4 min readSume
All posts

Add "type": "http" to the entry. Claude Code reads an MCP entry that has no type as a local stdio server, so a block that only has a url is skipped with the message MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry. Sume's MCP quickstart shows the Cursor shape, which is exactly such a block, so pasting it into .mcp.json triggers the message.

Claude Code's side comes from its MCP documentation, read on 2026-10-03. Sume's side comes from the MCP quickstart and OAuth and API keys pages.

Why does Claude Code skip a url-only entry?

Because the type field decides the transport, and the default is stdio. The Claude Code docs say a JSON entry with a url but no type is a configuration error, since an entry with no type is treated as a stdio server that needs a command. Claude Code skips that server and prints the message above. Before v2.1.202 the same mistake surfaced as command: expected string, received undefined, which says nothing about the real cause.

The docs list a second repair for blocks written for another client: a key with characters other than letters, numbers, hyphens and underscores needs a new server name. Sume's entry is named sume, so only the type matters here.

What is the entry Claude Code accepts for Sume?

Sume's hosted endpoint is https://mcp.sume.com/mcp. In .mcp.json the working shape adds the type. The docs also say type accepts streamable-http as an alias for http, because the MCP specification uses that name for the transport, so a block copied from a server's own docs works either way.

If you would rather not edit JSON, claude mcp add-json takes the object that sits inside mcpServers, not the wrapper. The first command below does that; the second is the quickstart's own claude mcp add form, which sets the transport for you.

Entry shapes compared; Claude Code behavior from its MCP docs and Sume values from the MCP quickstart, read 2026-10-03.
EntryHow Claude Code reads itResult for Sume
{"url": "https://mcp.sume.com/mcp"} (the Cursor shape)No type, so stdioSkipped with the url-but-no-type message
{"type": "http", "url": "https://mcp.sume.com/mcp"}Remote HTTP serverConnects; shows Needs authentication until you sign in
{"type": "streamable-http", "url": "https://mcp.sume.com/mcp"}Alias for httpSame as the line above
claude mcp add --transport http sume https://mcp.sume.com/mcpWrites the typed entry for youSame as the typed entry
claude mcp add-json sume '{"type":"http","url":"https://mcp.sume.com/mcp"}'
claude mcp login sume
claude mcp get sume

How do I confirm the server loaded?

Run claude mcp get sume or claude mcp list. The docs describe statuses such as Connected, Needs authentication and Failed to connect; a skipped entry is a configuration problem, not a connection status, so it is reported with the message instead. For a remote server that is added but not signed in, Sume's quickstart has you run claude mcp login sume, which sends you to the consent page on the MCP host.

Then ask Claude to call mcp_health. Sume's tools and gates page lists it as the read-only tool that reports endpoint readiness, auth source and safety posture, and authenticated.auth_source should read mcp_oauth after an OAuth sign-in.

What about scripts and headless runs?

The Claude Code docs add one detail for automation: in --output-format stream-json runs, a skipped --mcp-config entry is also reported in the mcp_server_errors field of the system init event, so a script can tell that the server never loaded. That needs Claude Code v2.1.219 or later. In non-interactive runs Sume has no sign-in prompt to show, so use the API-key path from OAuth and API keys: send Authorization: Bearer <key> or x-api-key in the entry's headers, and keep the key in an environment variable rather than in a committed file.

OAuth sessions see read-only tools unless Write is switched on at consent; an API key sees the full hosted set. Paid calls need an idempotency_key either way.

Is the fix the same for other clients?

Not identical. The Claude Code page says the type field decides the transport, and it accepts http, sse and ws; a Cursor entry is a bare url, and Cursor's own documentation lists Streamable HTTP as a transport it supports. That is why one snippet cannot be pasted between the two without an edit. Sume's quickstart lists the Claude Code command separately from the Cursor block for the same reason, and the command route (claude mcp add --transport http) avoids the problem because it writes the typed entry itself.

If your team shares one .mcp.json, commit the typed version, since Claude Code reads that file for project-scoped servers and the typed form is a superset of what other clients need to find the URL. After the edit, restart the session and run claude mcp list; a server that was skipped before will now show a connection status instead of an error.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume