▲HIGHLAND DOCS

MCP for Claude

Four ways to give Claude the Highland tools. All of them use the same MCP server and bill the same API key.

WhereMethodAuth
claude.ai (web, mobile)Custom connectorKey in the URL path
Claude DesktopCustom connector, or mcp-remote in the config fileKey in the URL path, or header
Claude Code (CLI, IDE)claude mcp add --transport httpHeader
Your own appMessages API MCP connectorauthorization_token

claude.ai and Claude Desktop (custom connector)

  1. Open Settings → Connectors → Add custom connector.
  2. Name: Highland. URL: https://api.highlnd-intel.group/mcp/<YOUR_KEY> (your full hk_live_... key at the end).
  3. Save, then in a chat open the tools menu and turn Highland on.
  4. Try: "Check the DNS and email security (SPF, DKIM, DMARC) of example.com."

On Team and Enterprise plans an owner may need to add the connector for the organization first.

Claude Desktop (config file)

If you prefer the config file, bridge the remote server with mcp-remote. Open Settings → Developer → Edit config and add:

claude_desktop_config.json
{
  "mcpServers": {
    "highland": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://api.highlnd-intel.group/mcp",
        "--header", "Authorization:${HIGHLAND_AUTH}"
      ],
      "env": { "HIGHLAND_AUTH": "Bearer hk_live_YOUR_KEY" }
    }
  }
}

Restart Claude Desktop. The header is split as Authorization:${HIGHLAND_AUTH} with no space because some shells on Windows break arguments at spaces.

Claude Code

bash
# This project only (written to .mcp.json; keep the key in an env var, not in git)
claude mcp add --transport http highland https://api.highlnd-intel.group/mcp \
  --header "Authorization: Bearer $HIGHLAND_KEY"

# Every project on this machine
claude mcp add --scope user --transport http highland https://api.highlnd-intel.group/mcp \
  --header "Authorization: Bearer $HIGHLAND_KEY"

claude mcp list          # shows highland ✓ connected

A shared .mcp.json can read the key from the environment, so it is safe to commit:

.mcp.json
{
  "mcpServers": {
    "highland": {
      "type": "http",
      "url": "https://api.highlnd-intel.group/mcp",
      "headers": { "Authorization": "Bearer ${HIGHLAND_KEY}" }
    }
  }
}

Inside Claude Code, type /mcp to see the tools. Ask: "Use highland mail-auth on our domain and write the fixes to DNS-FIXES.md."

Messages API (MCP connector)

Claude can call the server itself during an API request: no MCP client code on your side. Send the server in mcp_servers, turn it on with an mcp_toolset tool, and add the MCP connector beta header.

python (anthropic SDK)
# pip install anthropic
import os, anthropic

client = anthropic.Anthropic()  # reads ANTHROPIC_API_KEY

resp = client.beta.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    betas=["mcp-client-2025-11-20"],
    mcp_servers=[{
        "type": "url",
        "url": "https://api.highlnd-intel.group/mcp",
        "name": "highland",
        "authorization_token": os.environ["HIGHLAND_KEY"],
    }],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "highland"}],
    messages=[{"role": "user", "content": "Is example.com protected against email spoofing? Check SPF, DKIM and DMARC."}],
)

for block in resp.content:
    if block.type == "text":
        print(block.text)
    elif block.type == "mcp_tool_use":
        print("called", block.name, block.input)
typescript (@anthropic-ai/sdk)
// npm i @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();
const resp = await client.beta.messages.create({
  model: "claude-opus-5-5",
  max_tokens: 1024,
  betas: ["mcp-client-2025-11-20"],
  mcp_servers: [{
    type: "url",
    url: "https://api.highlnd-intel.group/mcp",
    name: "highland",
    authorization_token: process.env.HIGHLAND_KEY,
  }],
  tools: [{ type: "mcp_toolset", mcp_server_name: "highland" }],
  messages: [{ role: "user", content: "Redact the PII in: 'Call Jo at 902-555-0142 or jo@example.com'" }],
});
console.log(resp.content.filter((b) => b.type === "text").map((b) => b.text).join("\n"));
curl
curl -s https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "anthropic-beta: mcp-client-2025-11-20" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-opus-5-5",
    "max_tokens": 1024,
    "mcp_servers": [{"type":"url","url":"https://api.highlnd-intel.group/mcp","name":"highland","authorization_token":"'"$HIGHLAND_KEY"'"}],
    "tools": [{"type":"mcp_toolset","mcp_server_name":"highland"}],
    "messages": [{"role":"user","content":"Look up the DNS records of example.com"}]
  }'

Only some tools

With 70 tools, limiting Claude to the ones a task needs saves input tokens and keeps it on track. Turn everything off by default and allow a list:

python
tools=[{
    "type": "mcp_toolset",
    "mcp_server_name": "highland",
    "default_config": {"enabled": False},
    "configs": {"dns-lookup": {"enabled": True}, "mail-auth": {"enabled": True}, "rdap-lookup": {"enabled": True}},
}]

Troubleshooting

SymptomFix
Connector shows "couldn't connect"Check the URL ends in your full key and has no space. Test it with the curl in MCP overview.
Tools listed but every call says insufficient_creditsYour balance is 0. Buy credits or redeem a coupon.
401 invalid_api_keyThe key is wrong or was revoked. Make a new one.
Claude Code says 405You used --transport sse. Use --transport http.