Test it
Requests to copy, the MCP Inspector, the TypeScript and Python SDKs, and a one-line check that a connection closes.
Every example on this page runs against the public server. None of them writes anything.
With curl
List the tools:
curl https://api.getwigoo.com/api/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Read what a destination offers:
curl https://api.getwigoo.com/api/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"get_destination","arguments":{"destination_id":"jp","currency":"GBP"}}}'See a tool error. An id that does not exist comes back as text for a model, not as an HTTP error:
curl https://api.getwigoo.com/api/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"get_destination","arguments":{"destination_id":"zz-nope"}}}'Check that a connection closes
A request that answers 200 but never ends holds a connection open, and no status code shows it. Add a time limit and read the body to the end. Every request to this server finishes in well under a second:
curl --max-time 10 -sS -o /dev/null -w '%{http_code} in %{time_total}s\n' \
https://api.getwigoo.com/api/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'The output looks like 200 in 0.21s. If curl stops with Operation timed out, the stream stayed open.
With the MCP Inspector
The MCP Inspector lists and calls tools from a terminal or a browser UI, with no code:
npx @modelcontextprotocol/inspector --cli https://api.getwigoo.com/api/mcp --transport http --method tools/listnpx @modelcontextprotocol/inspector --cli https://api.getwigoo.com/api/mcp --transport http \
--method tools/call --tool-name search_destinations --tool-arg query=JapanRun npx @modelcontextprotocol/inspector with no flags to open the browser UI, choose Streamable HTTP and paste the URL.
With an SDK
import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
const client = new Client({ name: 'my-agent', version: '1.0.0' });
await client.connect(new StreamableHTTPClientTransport(new URL('https://api.getwigoo.com/api/mcp')));
const plans = await client.callTool({
name: 'list_plans',
arguments: { destination_id: 'jp', type: 'fixed', currency: 'EUR' },
});
const { plans: list } = JSON.parse(plans.content[0].text);
const quote = await client.callTool({
name: 'get_quote',
arguments: { destination_id: 'jp', plan_id: list[0].plan_id, currency: 'EUR' },
});
console.log(JSON.parse(quote.content[0].text).buy_url);
await client.close();Both programs search nothing and buy nothing: they list the fixed plans for Japan, ask for a quote on the first one and print the buy_url.
When something does not work
| You see | Likely cause |
|---|---|
406 Not Acceptable | accept is missing application/json or text/event-stream. Send both |
415 Unsupported Media Type | content-type is not application/json |
400 with code -32020 | A 2026-protocol request is missing mcp-protocol-version, mcp-method or mcp-name |
405 Method not allowed | You sent GET or DELETE. Use POST |
A reply with isError: true | The arguments or an id were wrong. Read the text: it says what to call next |
| Prices in dollars when you asked for another currency | The code is not one of the 55 Wigoo charges in |
Claude Code does not list wigoo | Servers load when a session starts. Open a new session |