Koskamo

Stackhal MCP

A public, read-only MCP server providing developer tools for DNS, email security, SEO, and infrastructure diagnostics. It exposes tools for auditing websites, analyzing GEO readiness, inspecting domain security, transpiling configurations, and validating app links.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Stackhal MCP logo, by Bahdan HalCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by Bahdan Hal
You need:No account or API key is required.
MCP endpoint (Streamable HTTP)
https://stackhal.com/mcp
Vendor documentation

What its tools do

13 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

13 of 13 have a description · 13 of 13 declare behavior hints · 13 of 13 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Audit website SEO and technical health
  • Inspect domain email security (DMARC, SPF)
  • Transpile Nginx/Apache configs to Caddyfile
  • Trace DNS delegation and propagation

Source and maintenance

Community listingRegistry 1.2.0
Maintenance checked

Protocol and capabilities

Server
StackHal DevTools & Audits MCP 1.2.0
MCP protocol negotiated in check
2025-11-25
Tools
13 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  },
  "completions": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Public tools need no authentication. Five of them make live requests from the Stackhal server to the public internet: trace_dns_delegation, inspect_domain_security, audit_website_seo, analyze_geo_readiness, and validate_app_links. The others work only on the input you pass: transpile_to_caddyfile, transpile_regex_engine, calculate_cidr_overlap, diagnose_cors_policy, generate_favicon_suite, inspect_apple_pkpass, generate_apple_pkpass_spec, and repair_apple_pkpass_spec.

Tools

13 advertised

validate_app_links — Validate Universal Links and App Links
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Inspect and validate Apple App Site Association (apple-app-site-association) and Android Digital Asset Links (assetlinks.json) files, HTTPS hosting rules, and test URL path routing, and compare the origin AASA with the copy on Apple's CDN.

validate_app_links input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "The target domain name (e.g. \"example.com\") hosting universal link and asset link files."
    },
    "test_url": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Optional web URL path to test against Apple AASA components and exclusion routing patterns."
    }
  }
}
validate_app_links annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
audit_website_seo — Technical SEO Audit
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Run a deterministic technical SEO audit for a public website URL. Checks canonicals, title tags, headings, robots.txt, sitemaps, redirects, crawl traps, and indexability.

audit_website_seo input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The public website URL to audit (e.g. https://example.com)."
    }
  }
}
audit_website_seo annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
transpile_to_caddyfile — Convert Nginx or Apache Config to Caddyfile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Transpile Nginx (nginx.conf, server blocks) or Apache (.htaccess, VirtualHost) web server configuration to clean, idiomatic Caddyfile with migration advisories.

transpile_to_caddyfile input schema
{
  "type": "object",
  "required": [
    "config_content"
  ],
  "properties": {
    "server_type": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Optional source server type: \"nginx\" or \"apache\". If omitted, auto-detected from content syntax."
    },
    "config_content": {
      "type": "string",
      "description": "The raw web server configuration string (nginx.conf, server block, .htaccess, or VirtualHost) to transpile."
    }
  }
}
transpile_to_caddyfile annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
calculate_cidr_overlap — Calculate CIDR Overlap
Advertised by the server during the last successful anonymous check.
Advertised read-only

Analyze IPv4/IPv6 CIDR subnets for range collisions, full containment, 2D bit-tree matrix partition, and available free subnet allocation.

calculate_cidr_overlap input schema
{
  "type": "object",
  "required": [
    "cidrs"
  ],
  "properties": {
    "cidrs": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Array of IPv4 or IPv6 CIDR strings to analyze for collisions and tree partition."
    },
    "parent_cidr": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Optional parent CIDR string (e.g. 10.0.0.0/16) to constrain free subnet allocation search."
    },
    "requested_free_prefix": {
      "type": [
        "null",
        "integer"
      ],
      "default": null,
      "description": "Optional target prefix length (e.g. 20, 24) to find available free subnet block inside parent range."
    }
  }
}
calculate_cidr_overlap annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
diagnose_cors_policy — Diagnose CORS Policy
Advertised by the server during the last successful anonymous check.
Advertised read-only

Analyze CORS HTTP request and response headers for wildcard/credential security violations, missing Vary: Origin, preflight OPTIONS handling, and header exposure.

diagnose_cors_policy input schema
{
  "type": "object",
  "required": [
    "request_origin",
    "response_headers"
  ],
  "properties": {
    "request_origin": {
      "type": "string",
      "description": "The incoming HTTP request Origin header (e.g. \"https://app.example.com\")."
    },
    "response_headers": {
      "type": "array",
      "items": {},
      "description": "The server HTTP response headers (as key-value map or list of \"Header: Value\" strings)."
    },
    "with_credentials": {
      "type": [
        "null",
        "boolean"
      ],
      "default": false,
      "description": "Whether the cross-origin request includes cookies or authorization credentials."
    }
  }
}
diagnose_cors_policy annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
trace_dns_delegation — Trace DNS Delegation
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Query live DNS records and inspect the authoritative nameservers returned for a domain.

trace_dns_delegation input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "The target domain name (e.g. \"example.com\") to query using the application host resolver."
    },
    "query_type": {
      "type": [
        "null",
        "string"
      ],
      "default": "A",
      "description": "Optional DNS record type: \"A\" (default), \"AAAA\", \"CNAME\", \"TXT\", \"MX\", \"NS\", \"SOA\", or \"CAA\"."
    }
  }
}
trace_dns_delegation annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
inspect_domain_security — Inspect Domain Email Security
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Inspect domain email security and deliverability standards: DMARC (BIMI compliance), BIMI DNS & SVG reachability, MTA-STS (RFC 8461), SMTP TLS-RPT (RFC 8460), SPF and MX records.

inspect_domain_security input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "The domain name to inspect (e.g. stripe.com, example.com)."
    }
  }
}
inspect_domain_security annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
generate_favicon_suite — Generate Favicon Suite
Advertised by the server during the last successful anonymous check.
Advertised read-only

Generate modern multi-platform favicon bundle (adaptive dark-mode SVG, multi-resolution ICO, Apple Touch Icon, Android PWA icons, webmanifest) and minimal HTML tags from SVG or image input.

generate_favicon_suite input schema
{
  "type": "object",
  "required": [
    "svg_content"
  ],
  "properties": {
    "svg_content": {
      "type": "string",
      "description": "The raw SVG XML markup string to convert into modern multi-platform favicon suite."
    },
    "dark_mode_strategy": {
      "type": [
        "null",
        "string"
      ],
      "default": "css_invert_fill",
      "description": "Optional dark mode strategy: \"css_invert_fill\" (default), \"css_class_swap\", or \"preserve_colors\"."
    }
  }
}
generate_favicon_suite annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
analyze_geo_readiness — Analyze GEO Readiness
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Analyze Generative Engine Optimization (GEO) signals and AI crawler readiness for a web page (schema, citations, provenance, answer structure, llms.txt, AI bot robots rules).

analyze_geo_readiness input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The web page URL to analyze for GEO readiness."
    }
  }
}
analyze_geo_readiness annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
inspect_apple_pkpass — Inspect Apple Wallet Pass
Advertised by the server during the last successful anonymous check.
Advertised read-only

Inspect and validate Apple Wallet .pkpass JSON structure (pass.json) or package manifests: checks required keys, pass styles, dates, ISO 8601 timezones, transit types, barcodes, and color contrast.

inspect_apple_pkpass input schema
{
  "type": "object",
  "required": [
    "pass_json"
  ],
  "properties": {
    "pass_json": {
      "type": "string",
      "description": "The raw pass.json JSON string to inspect and validate."
    }
  }
}
inspect_apple_pkpass annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
generate_apple_pkpass_spec — Generate Apple Wallet pass.json
Advertised by the server during the last successful anonymous check.
Advertised read-only

Generate a production-ready, fully compliant Apple Wallet pass.json specification based on pass type, metadata, colors, barcode, and field values.

generate_apple_pkpass_spec input schema
{
  "type": "object",
  "required": [
    "pass_type",
    "organization_name",
    "description"
  ],
  "properties": {
    "pass_type": {
      "type": "string",
      "description": "Pass style type: \"boardingPass\", \"eventTicket\", \"storeCard\", \"coupon\", or \"generic\"."
    },
    "description": {
      "type": "string",
      "description": "Human-readable description of the pass, e.g. \"Flight from SFO to WAW\"."
    },
    "label_color": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Label text color as CSS rgb(r, g, b), e.g. \"rgb(148, 163, 184)\"."
    },
    "transit_type": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Transit type for boardingPass: \"PKTransitTypeAir\", \"PKTransitTypeTrain\", \"PKTransitTypeBus\", \"PKTransitTypeBoat\", \"PKTransitTypeGeneric\"."
    },
    "serial_number": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Unique pass serial number, e.g. \"LOT-89421\"."
    },
    "barcode_format": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Barcode format: \"PKBarcodeFormatQR\", \"PKBarcodeFormatPDF417\", \"PKBarcodeFormatAztec\", \"PKBarcodeFormatCode128\"."
    },
    "barcode_message": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Barcode message payload, e.g. \"M1HAL/BAHDAN ELO027\"."
    },
    "team_identifier": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Apple Developer 10-character Team ID, e.g. \"BAHDAN9988\"."
    },
    "background_color": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Background color as CSS rgb(r, g, b), e.g. \"rgb(15, 23, 42)\"."
    },
    "foreground_color": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Foreground text color as CSS rgb(r, g, b), e.g. \"rgb(255, 255, 255)\"."
    },
    "organization_name": {
      "type": "string",
      "description": "Name of the pass issuing organization, e.g. \"Acme Airlines\"."
    },
    "pass_type_identifier": {
      "type": [
        "null",
        "string"
      ],
      "default": null,
      "description": "Apple Pass Type Identifier starting with \"pass.\", e.g. \"pass.com.example.ticket\"."
    }
  }
}
generate_apple_pkpass_spec annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
repair_apple_pkpass_spec — Repair Apple Wallet pass.json
Advertised by the server during the last successful anonymous check.
Advertised read-only

Automatically repair and sanitize broken Apple Wallet pass.json manifests: fixes missing formatVersion, prefixes passTypeIdentifier, ensures 10-character team ID, normalizes dates to ISO 8601 with timezones, and auto-corrects low contrast.

repair_apple_pkpass_spec input schema
{
  "type": "object",
  "required": [
    "pass_json"
  ],
  "properties": {
    "pass_json": {
      "type": "string",
      "description": "The raw, broken pass.json JSON string to repair."
    }
  }
}
repair_apple_pkpass_spec annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
transpile_regex_engine — Convert Regex Between Engines
Advertised by the server during the last successful anonymous check.
Advertised read-only

Transpile and analyze regular expressions across engines (PCRE, Go RE2, JavaScript, Python re, Rust regex) with compatibility checks and ReDoS safety analysis.

transpile_regex_engine input schema
{
  "type": "object",
  "required": [
    "pattern"
  ],
  "properties": {
    "pattern": {
      "type": "string",
      "description": "The regular expression pattern string to analyze and transpile."
    },
    "source_engine": {
      "type": [
        "null",
        "string"
      ],
      "default": "pcre",
      "description": "Optional source engine: \"pcre\" (default), \"go_re2\", \"javascript\", \"python\", \"rust\"."
    },
    "target_engine": {
      "type": [
        "null",
        "string"
      ],
      "default": "go_re2",
      "description": "Optional target engine: \"go_re2\" (default), \"pcre\", \"javascript\", \"python\", \"rust\"."
    }
  }
}
transpile_regex_engine annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1286 ms
95th percentile latency
1286 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1286 ms · metadata changed · 13 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http stackhal-mcp https://stackhal.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add stackhal-mcp --url https://stackhal.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable stackhal-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "stackhal-mcp": {
      "url": "https://stackhal.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "stackhal-mcp": {
      "type": "streamableHttp",
      "url": "https://stackhal.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start stackhal-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "stackhal-mcp": {
      "type": "http",
      "url": "https://stackhal.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http stackhal-mcp https://stackhal.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://stackhal.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "stackhal-mcp": {
      "serverUrl": "https://stackhal.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Stackhal MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.