Quick answers to the things people ask most. Jump to a topic:
What you can do once connected:
claude-desktop) and click Create Tokensamp_... token immediately — it's shown only onceEdit ~/.claude/claude_desktop_config.json (create it if it doesn't exist):
{
"mcpServers": {
"samserver": {
"transport": "http",
"url": "https://samsearch.xrtech.dev/mcp",
"headers": {
"Authorization": "Bearer samp_YOUR_TOKEN_HERE"
}
}
}
}
Restart Claude Desktop. A 🤖 icon appears in the chat toolbar — you're connected.
https://samsearch.xrtech.dev/mcpAuthorization: Bearer samp_YOUR_TOKEN| Tool | What it does |
|---|---|
| list_opportunities | Your top scored contracts ranked by AI, filterable by score |
| get_account_stats | Overview: scored count, search terms, recent activity |
| search_opportunities | Full-text search within your opportunity list |
| dismiss_opportunity | Remove an opportunity from your list (soft delete, only affects you) |
| record_feedback | Mark good / bad / pursued / ignored / won / lost — improves future scoring |
| add_keyword | Add a search keyword to your profile (single words only) |
| trigger_search | Start a fresh SAM.gov search right now |
Install: pip install mcp httpx
import asyncio
from mcp.client.session import ClientSession
from mcp.client.sse import sse_client
TOKEN = "samp_YOUR_TOKEN_HERE"
SERVER = "https://samsearch.xrtech.dev/mcp"
async def test():
headers = {"Authorization": f"Bearer {TOKEN}"}
async with sse_client(f"{SERVER}/sse", headers=headers) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# List available tools
tools = await session.list_tools()
print("Tools:", [t.name for t in tools.tools])
# Call one
result = await session.call_tool("get_account_stats", {})
print(result.content[0].text)
asyncio.run(test())
SamServer searches SAM.gov on your behalf using an API key. The platform provides one, but if you see an "API key expired/rejected" banner, here's how to get your own (it's free):
This is the single biggest lever on result quality. SAM.gov matches your keyword against the opportunity title text, so one broad word finds far more than a specific phrase.
| Instead of… | Use… | Why |
|---|---|---|
virtual reality | virtual | Catches all of VR/AR/simulation contexts, not just the exact phrase. |
computer vision | computer, vision | Two broad words find far more than one narrow phrase. |
training simulator | training, simulator | Each word alone surfaces opportunities the phrase would miss. |
AR, VR, AI | (don't use) | 2–3 letter tokens match unrelated words (ARMY, PHARMACY) and flood results with junk. |
Rules SamServer enforces automatically: single words only (phrases are auto-split), minimum 4 letters, and vague modifiers ("advanced", "integrated", "next-generation") are dropped. The AI scoring still reads the full opportunity text — keywords just control which records get pulled from SAM.gov in the first place, so casting a wide net is correct strategy.
SamServer scores opportunities with AI. On the free platform key there are fair-use limits. Add your own OpenRouter key and those limits disappear — you run on your own (often free) AI budget.
Once your key is set, AI analysis never pauses for platform limits, and you can pick your own model (including free ones on OpenRouter).
If AI analysis pauses, your dashboard shows exactly why with a one-click way to upgrade or add your own key. Manage your plan on the Billing page.
Every endpoint that powers the dashboard is accessible programmatically using your personal API token.
Open the Developers & API page →
The developers page has curl, Python, and Claude Desktop examples, your token manager, and the full endpoint reference.