MCP server
The Model Context Protocol lets an AI client use tools from a server. Highland exposes every API as an MCP tool (70 tools), so your assistant can look up DNS, check email security, redact PII and more by itself, and you pay per successful call from your credits.
| URL (header auth) | https://api.highlnd-intel.group/mcp |
| URL (key in path) | https://api.highlnd-intel.group/mcp/<YOUR_KEY> for clients that cannot send headers (claude.ai, ChatGPT connectors) |
| Transport | Streamable HTTP, POST only, JSON responses (no SSE stream; GET answers 405 sse_not_supported) |
| Protocol versions | 2025-06-18, 2025-03-26, 2024-11-05 |
| Auth | Authorization: Bearer hk_live_... |
| Cost | initialize and tools/list are free. tools/call costs the API's price; bad input is never charged. |
| Batches | Up to 25 JSON-RPC messages per request |
Pick your client
Claudeclaude.ai connectors, Claude Desktop, Claude Code and the Messages API MCP connector.
OpenAIChatGPT developer mode, the Responses API remote MCP tool and the Agents SDK.
GrokxAI Responses API remote MCP tool and the xai-sdk for Python.
Editors and CLIsCursor, VS Code, Windsurf, Zed, Codex CLI, Gemini CLI and any MCP client.
Test it with curl
Every MCP request is a JSON-RPC 2.0 message sent with POST.
initialize
curl -s https://api.highlnd-intel.group/mcp \
-H "authorization: Bearer $HIGHLAND_KEY" \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'list tools (free)
curl -s https://api.highlnd-intel.group/mcp \
-H "authorization: Bearer $HIGHLAND_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | jq '.result.tools[] | {name, description}'call a tool (billed)
curl -s https://api.highlnd-intel.group/mcp \
-H "authorization: Bearer $HIGHLAND_KEY" \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"dns-lookup","arguments":{"domain":"example.com"}}}'A tool result looks like this. content[0].text is what the model reads; structuredContent has the full response including what you paid and your balance:
json
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [{ "type": "text", "text": "{\"domain\":\"example.com\",\"records\":{...}}" }],
"structuredContent": { "api": "dns-lookup", "priceCents": 2, "payment": "credits", "balanceCents": 996, "result": { "...": "..." } },
"isError": false
}
}Tool names and errors
- Tool
name= the API id (for exampledns-lookup,mail-auth,pii-redact). Each tool carries its JSON input schema and price in the description. The full list is in the API reference. - Payment and input problems come back as a tool result with
isError: trueand the error JSON as text (for exampleinsufficient_credits), so the model can tell you to top up instead of failing silently. - Protocol problems are JSON-RPC errors:
-32700 parse_error,-32600 invalid_request,-32601 method_not_found,-32602 unknown_toolorinvalid_arguments.