http-delete
Make an HTTP DELETE request to a specified URL with optional headers. Supports secret substitution using {secrets.key} syntax in URL and headers where 'key' corresponds to HAL_SECRET_KEY environment variables.
Give a model HTTP — every verb, with API keys substituted by reference so the secret never appears in the conversation, and OpenAPI specs turned into tools automatically.
LABSCO SUMMARY
That indirection is the whole design — a key referenced as {secrets.key} is substituted at send time and redacted from the response, so an API token never enters the transcript, and HAL_ALLOW_ patterns stop a secret from being sent to a host it was not meant for. The OpenAPI mode is the second reason to reach for it: point it at a specification and the endpoints arrive as tools, which beats teaching a model to hand-assemble paths. Treat it as powerful by construction — with no host restrictions configured, these seven tools can reach anything the machine can.
A general HTTP client for models. Seven verb tools plus a secret-substitution scheme: credentials live in the environment and are referenced as {secrets.key}, so the model composes requests with them without ever seeing their values.
No account of its own — it needs whatever the APIs you point it at need. It runs as npx hal-mcp. Secrets go in HAL_SECRET_ prefixed variables, one per credential; HAL_ALLOW_ variables bind namespaced secrets to permitted URL patterns; HAL_SWAGGER_FILE and HAL_API_BASE_URL switch on the generated-tools mode. Note what it does not have: no allowlist of hosts by default, so a request can go anywhere the machine can reach.
One command — npx hal-mcp
USE CASES
Make the request directly with the right method, headers and body, and reference the key rather than pasting it.
Point HAL at the specification and its endpoints become callable tools, with the base URL overridden if the spec's servers are wrong for your environment.
Put the credential in the environment, reference it by key in the header, and let substitution and redaction keep it out of the conversation.
Ask for its options and headers first, which is cheaper than a failed request against an unfamiliar API.
Create it, amend it in place, replace it wholesale, and delete it when done.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
http-deleteMake an HTTP DELETE request to a specified URL with optional headers. Supports secret substitution using {secrets.key} syntax in URL and headers where 'key' corresponds to HAL_SECRET_KEY environment variables.
http-getMake an HTTP GET request to a specified URL. Supports secret substitution using {secrets.key} syntax where 'key' corresponds to HAL_SECRET_KEY environment variables.
http-headMake an HTTP HEAD request to a specified URL with optional headers (returns only headers, no body). Supports secret substitution using {secrets.key} syntax in URL and headers where 'key' corresponds to HAL_SECRET_KEY environment variables.
http-optionsMake an HTTP OPTIONS request to a specified URL to check available methods and headers. Supports secret substitution using {secrets.key} syntax in URL and headers where 'key' corresponds to HAL_SECRET_KEY environment variables.
http-patchMake an HTTP PATCH request to a specified URL with optional body and headers. Supports secret substitution using {secrets.key} syntax in URL, headers, and body where 'key' corresponds to HAL_SECRET_KEY environment variables.
http-postMake an HTTP POST request to a specified URL with optional body and headers. Supports secret substitution using {secrets.key} syntax in URL, headers, and body where 'key' corresponds to HAL_SECRET_KEY environment variables.
http-putMake an HTTP PUT request to a specified URL with optional body and headers. Supports secret substitution using {secrets.key} syntax in URL, headers, and body where 'key' corresponds to HAL_SECRET_KEY environment variables.
list-secretsGet a list of available secret keys that can be used with {secrets.key} syntax. Only shows the key names, never the actual secret values.
BEFORE YOU INSTALL
8 tools when we connected. Setting HAL_SWAGGER_FILE to a spec adds one swagger_{operationId} tool per endpoint, so a configured install exposes 8 plus the spec's operations.
CONTEXT COST
Rated by the size of the 8 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx hal-mcp{
"mcpServers": {
"hal": {
"command": "npx",
"args": [
"hal-mcp"
]
}
}
}{
"mcpServers": {
"hal": {
"command": "npx",
"args": [
"hal-mcp"
],
"env": {
"HAL_SWAGGER_FILE": "<YOUR_HAL_SWAGGER_FILE>",
"HAL_API_BASE_URL": "<YOUR_HAL_API_BASE_URL>",
"HAL_SECRET_API_KEY": "<YOUR_HAL_SECRET_API_KEY>",
"HAL_SECRET_USERNAME": "<YOUR_HAL_SECRET_USERNAME>",
"HAL_SECRET_PASSWORD": "<YOUR_HAL_SECRET_PASSWORD>"
}
}
}
}