Documentation
Defense Signals™ MCP server
Reference documentation for connecting an AI client to Defense Signals over the Model Context Protocol: endpoint, transport, OAuth 2.1, entitlements, monitoring, and support.
https://www.defensesignals.com/mcp — OAuth required, tools act as you.
OAuth-protected server: an anonymous probe of /mcp is supposed to return 401. Monitors should use /health/mcp.
Endpoint and transport
The Defense Signals™ MCP server is a single hosted endpoint. There is nothing to install, no local process, and no API key to paste into a client.
Endpoint
https://www.defensesignals.com/mcp
Transport
Streamable HTTP (MCP 2025-06-18)
Authentication
OAuth 2.1 + dynamic client registration
Protocol methods
initialize, tools/list, tools/call
Every request is a JSON-RPC 2.0 POST. Clients must send Accept: application/json, text/event-stream; servers built on the official MCP SDKs reject requests without it.
OAuth 2.1 flow
The MCP endpoint is a protected resource. Authorization is delegated to the Defense Signals authorization server, which supports dynamic client registration — so compatible clients register themselves with no manual setup.
- The client calls
POST /mcpwithout a token and receives401with aWWW-Authenticate: Bearerchallenge carryingresource_metadata. - The client fetches the protected-resource metadata document, which names the authorization server.
- The client fetches the authorization server's
/.well-known/oauth-authorization-serverdiscovery document and registers itself dynamically. - You sign in with your Defense Signals account and approve the connection on our consent screen.
- The client exchanges the authorization code (PKCE) for an access token and replays the MCP request with
Authorization: Bearer ….
Protected-resource metadata: https://www.defensesignals.com/.well-known/oauth-protected-resource
Authorization-server discovery: linked from the authorization_servers array of that document, at each issuer's /.well-known/oauth-authorization-server.
Directory manifest: https://www.defensesignals.com/api/public/mcp-directory.json
The expected anonymous 401
An anonymous call to /mcp returns 401 Unauthorized. This is correct behavior and required by the MCP authorization specification — it is how a client discovers where to sign in.
POST /mcp (no Authorization header) HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer resource_metadata="https://www.defensesignals.com/.well-known/oauth-protected-resource"
Some directory listings run an unauthenticated probe and mark the server "unhealthy" when it sees that 401. It does not indicate downtime. The alternative — answering anonymous tool calls — would publish member intelligence to anyone on the internet.
For monitoring, use the public health endpoint instead: https://www.defensesignals.com/health/mcp. It returns 200 with operational status, transport, OAuth protection state, discovery status, and a timestamp — and no protected data.
Tools
search_signals
Read-onlyKeyword search across published intelligence. Returns headline, summary, category, author, publication date, tags, and reading time.
get_signal
Read-onlyFull text and metadata for one published signal, addressed by slug. Premium bodies require a paid membership on the calling account.
ask_signal
ResearchA cited research answer grounded only in published signals, Atlas event evidence, and verified knowledge-graph relationships. Consumes the same daily Ask Signal™ allowance as the web application.
search_organizations
Read-onlyPublished organization profiles — agencies, components, laboratories, and defense contractors — matched by name.
get_organization
Read-onlyOne organization profile: identity, the published Defense Signals Assessment™, evidence-backed relationships, and related signals, events, and opportunities scoped to your plan.
search_installations
Read-onlyPublished installation profiles — bases, arsenals, depots, ranges, and laboratories — matched by name, branch, or state.
get_installation
Read-onlyOne installation profile: identity, the published Defense Signals Assessment™, resident organizations, and related signals, events, and opportunities scoped to your plan.
get_organization_related
Read-onlyOnly the related intelligence for one organization — signals, opportunities, events, verified relationships, and knowledge-graph context — with optional section selection. Archive window and Opportunity Watch™ entitlement apply.
get_installation_related
Read-onlyOnly the related intelligence for one installation — signals, opportunities, events, verified relationships, and knowledge-graph context — with optional section selection. Archive window and Opportunity Watch™ entitlement apply.
search_events
Read-onlySearch the published Atlas™ calendar of defense symposia, industry days, conferences, and expos by keyword, organizer, location, or date range.
get_event
Read-onlyOne published Atlas™ event: dates, location, organizer, published agenda sessions and participants, linked organizations, related signals, and evidence lineage. Linked opportunities require Opportunity Watch™.
get_related_intelligence
Read-onlyBounded traversal from one published entity (signal, organization, installation, event, or opportunity) to connected intelligence, with relationship type and evidence status. Limited to 1 hop by default, 2 maximum, with a conservative result cap — not a graph export.
list_opportunities
Read-onlyTracked federal contract and grant opportunities from Opportunity Watch™, newest first.
list_saved_signals
Read-onlyThe signed-in member's own reading list.
save_signal
WriteAdds a published signal to the signed-in member's reading list. It only ever writes to the caller's own account.
Scopes and subscription permissions
Defense Signals access tokens carry no custom OAuth scopes. Authorization is enforced server-side: every tool call runs as the signed-in member, under that member's row-level entitlements. A token cannot reach anything the same person could not reach when signed in to the site.
| Membership | Through the MCP tools |
|---|---|
| Free account | Search and read public signals, list tracked opportunities, manage your own reading list. |
| Pro / Executive | Adds the full archive, premium brief bodies, and complete Opportunity Watch™ detail. |
| Team / Enterprise | Everything above for each seat; each member connects with their own account. |
There are no shared API keys and no service-role access behind the MCP server. Revoking a member's access, or ending a subscription, immediately changes what their assistant can retrieve.
Supported clients and connection instructions
Any client that supports remote MCP servers over Streamable HTTP with OAuth can connect. Step-by-step guides:
Generic configuration for file-based clients:
{
"mcpServers": {
"defense-signals": {
"type": "http",
"url": "https://www.defensesignals.com/mcp"
}
}
}Claude Code, one line:
claude mcp add --scope user --transport http defense-signals 'https://www.defensesignals.com/mcp'
Troubleshooting
The client shows 401 or “unauthorized”.
Expected before sign-in. If it persists after approving the consent screen, remove the connector and add it again so the client re-runs discovery and registration.
A directory or monitor reports the server as unhealthy.
Its probe is anonymous and is seeing the required OAuth challenge. Check https://www.defensesignals.com/health/mcp instead — it answers 200 when the server is operational.
406 Not Acceptable.
The client did not send Accept: application/json, text/event-stream. That header is mandatory on Streamable HTTP POSTs.
Tools are missing or stale after we ship changes.
Assistants cache the tool list. Refresh the connector (ChatGPT: Refresh under the app's Information; Claude: refresh the connector) or start a new session.
A premium brief returns a restricted response.
The signed-in account does not have a paid membership. Upgrade on the pricing page; the same token then returns full text.
Sign-in loops back to the site instead of the client.
The consent redirect was interrupted, usually by a blocked pop-up or a third-party cookie block. Retry in a normal browser window.
Data handling
- Tool calls run as the authenticated member; row-level security is enforced on every query.
- Only
save_signalwrites, and only to the caller's own reading list. - Access tokens are held by your MCP client, never logged or returned by our tools.
- We log tool name, timing, and outcome for reliability — not prompt or conversation content.
- Published intelligence returned through the tools stays subject to the Defense Signals terms; cite it, don't redistribute it wholesale.
- No shared API keys or service-role credentials are used by the MCP server.
Support
Connection help and enterprise questions: support@defensesignals.com. Setup walkthroughs live on the AI assistant hub, and the server overview is at /mcp-server.
