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.
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. The only tool that mutates state, and 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.
