@palisadeemail/mcp
Connect an MCP client to the Palisade Email Authentication MCP, which monitors and manages SPF, DKIM, DMARC, MTA-STS, and BIMI for your domains.
Palisade's MCP server is remote (Streamable HTTP at https://api.palisade.email/mcp). This package is a thin local bridge for stdio-based clients, using mcp-remote under the hood. It signs you in through Palisade's public OAuth client: the browser opens, you pick an organization, and the bridge holds a token scoped to it and to your role. There is no API key to create and nothing to configure.
Use it
npx -y @palisadeemail/mcp
Client config (stdio)
{
"mcpServers": {
"palisade": {
"command": "npx",
"args": ["-y", "@palisadeemail/mcp"]
}
}
}
Codex
codex mcp add palisade -- npx -y @palisadeemail/mcp
Claude Code
Claude Code speaks Streamable HTTP itself, so it does not need the bridge. It signs in with the same client, on a fixed callback port:
claude mcp add --transport http --client-id ryKtuiPypMeYMoL1Cmhxtz6BYrEYQbLV --callback-port 8765 palisade https://api.palisade.email/mcp
claude.ai
Add a custom connector with the URL, Authentication Always required, and OAuth client Use your own OAuth client with the client ID above and the secret left blank. See the Palisade MCP guide.
What is refused
API keys are not accepted on the MCP endpoint; they remain the credential for the REST API. A client that registers its own OAuth client, through dynamic registration or a client ID metadata document, is refused too: the authorization server cannot attach an organization to such a client, so the endpoint answers 403 and names the client to use instead.
Sign-in
The bridge listens on http://localhost:8765/oauth/callback while you sign in. The port is fixed because the authorization server registers exact redirect URIs; if something else holds that port, free it before connecting.
If the server connects but the Palisade tools are missing
A session that offers only authenticate / complete_authentication has not finished signing in. Those two tools come from the client's own pending-OAuth state, not from Palisade; complete the sign-in in the browser and the full list under Tools appears.
This can also mean a same-named server is configured somewhere else and is the one in effect. In Claude Code, --scope local applies only to the directory it was run in, and a palisade entry in user scope applies everywhere else. Check which entry actually wins:
claude mcp get palisade
Tools
Accounts (get_account), live DNS reads for any domain (audit_domain, which scores the full SPF/DKIM/DMARC/BIMI/MTA-STS posture of a domain that need not be in your account, and validate_spf_include, which costs an SPF include against the 10-lookup limit before you add it), domains (list_domains, get_domain, which checks a domain in the account by id or by name, create_domain, update_domain, delete_domain, verify_domain), DNS setup (get_dns_records, which returns the exact records to publish at your own DNS provider), the remediation plan (get_domain_plan, which reports where a domain stands in the DMARC journey and what Palisade works next, including steps it has not opened tasks for yet), SPF diagnostics (get_spf, which reads the live record, its DNS lookup count against the 10-lookup limit, and the problems found), hosted DMARC (enable_hosted_dmarc), MTA-STS (get_mta_sts, enable_mta_sts, disable_mta_sts), remediation tasks (list_tasks, get_task, complete_task, dismiss_task), DMARC reporting (get_dmarc_summary, list_dmarc_senders, which report aggregate figures and per-source breakdowns rather than raw report XML), groups (list_groups, create_group, update_group, delete_group), billing (get_subscription, start_checkout, start_billing_portal), webhooks (list_webhook_events, list_webhook_endpoints, create_webhook_endpoint, delete_webhook_endpoint), prospecting reports (create_prospecting_report, which audits up to ten domains and returns a hosted PDF link to send a prospect, plus list_prospecting_reports, get_prospecting_report, delete_prospecting_report), DNS provider connections (list_dns_connections, get_dns_connection, and get_dns_connection_coverage, which answers whether Palisade can publish a domain's records itself instead of handing them over to be copied), and the account's activity log (list_activity_log, list_activity_log_actions).
Every tool that reads or changes Palisade's own records is scoped to the organization you signed in to; audit_domain and validate_spf_include are the exceptions, taking a domain name rather than an id and reading public DNS for anything.
create_prospecting_report also takes bare domain names, and audits every one of them, so it pays into the same live-DNS budget as audit_domain once per domain rather than once per report.
Palisade tells you which DNS records to publish; you apply them at whatever DNS provider hosts the domain. Payment happens on Stripe-hosted pages. Webhooks are the alternative to polling for long-running state changes: create_webhook_endpoint returns the signing secret once and never again, so store it when it is issued.
Environment
All optional.
PALISADE_MCP_URL— override the server URL (defaults tohttps://api.palisade.email/mcp).PALISADE_MCP_CLIENT_ID— override the OAuth client id (defaults to Palisade's public connector client).PALISADE_MCP_CALLBACK_PORT— override the sign-in callback port (defaults to8765; the authorization server must know the port you choose).
