Live

OAUTH 2.1

LIST RESEARCH

Search

OAuth 2.1 list research: your agent finds companies, jobs, papers, and more through SpecStream MCP with the signed-in user's token.

  • Per-user credentials. each call uses the actual user's SpecStream token, never a shared bot.
  • Encrypted per-tenant vault. AES-256, resolved at request time, never in LLM context.
  • Scoped before every call. pre-call scope check, 90-day SIEM-exportable audit chain.
SpecStream MCP
agent · Acme Q3
Run
Find Series A climate-tech startups in the EU that raised after 2025-01-01.
S
specstreammcp_compile
180ms
List research agent
Understood: climate-tech startups, Series A, EU HQ, raised after 2025-01-01. 40 results planned; ast_hash ready to run.
Sources: request reading, no charge yet
specstreammcp
1 compile
18:29
Message Claude...

Tools your research agent reaches for on SpecStream MCP, scoped per user.

CALL ANY TOOL
OAuth 2.1 list research: 61 SpecStream MCP tools to compile requests, run finds, enrich collections, and reconcile sources.
specstreammcp_compile
Understand a request
Read a request for a list, written in everyday words in any language: companies and local businesses, products and stores, jobs, papers, clinical trials, grants, tenders, datasets, repositories and packages, apps, books or podcasts. Return how SpecStream understood it: what to find, the conditions every result must meet, the facts to bring back (required or optional), how many, and in what order, with the ast_hash that identifies this reading. To add facts to, extend or refresh a list you have, name it with its parent_find_id and the operation: what it finds and its conditions stay as they are, and only the new facts to bring back or the new count are read. The caller must be allowed to read that list. Nothing runs and nothing is charged.
Parameters
Name
Type
Required
Description
q
string
Required
The request for a list, written in everyday words in any language. SpecStream reads it and returns how it understood it; nothing runs and nothing is charged.
locale
string
Optional
The locale code for the request, written as a two-letter language code, a hyphen and a two-letter region code. It defaults to en-US. Default: `en-US`.
retained
string
Optional
Optional reference to a list you already have, to extend it, add facts to it or refresh it. It names the earlier run and the operation, and what that list finds and its conditions stay as they are.
specstreammcp_edit_spec
Change what to find or bring back
specstreammcp_get_capacity_balance
Check the balance
specstreammcp_get_capacity_quote
Reopen a quote
specstreammcp_get_capacity_request
Find work already started
specstreammcp_get_collection
Open a collection
specstreammcp_get_find
Check on a run
specstreammcp_get_input_research
Review imported research
specstreammcp_get_project
Open a project
specstreammcp_get_reconciled_input
Read where filled cells came from
specstreammcp_get_reconciliation
Read a comparison
specstreammcp_get_reconciliation_fields
List fields to match on
specstreammcp_get_spec
Open a saved request
specstreammcp_get_spec_revision
Open one version
specstreammcp_get_web_source
Read a website source
specstreammcp_get_web_source_preview
Read a source preview
specstreammcp_list_activity
Lists
specstreammcp_list_collections
List collections
specstreammcp_list_find_rows
Read the results
specstreammcp_list_projects
List projects
specstreammcp_list_reconciliations
List recent comparisons
specstreammcp_list_request_templates
Start from an example
specstreammcp_list_specs
List saved requests
specstreammcp_list_web_sources
List website sources
specstreammcp_list_your_fields
Read your fields
specstreammcp_open_list_file
List file
specstreammcp_open_specstream
Lists
specstreammcp_open_specstream_panel
Selected list
specstreammcp_preview_web_source
Read a website source again
specstreammcp_read_specstream_record_notes
Read record notes
specstreammcp_read_specstream_settings
List settings
specstreammcp_replay_find_decisions
Replay the checks
specstreammcp_search_lists
Find a list or record to mention
specstreammcp_search_workspace
Search your work
specstreammcp_show_specstream_lists
Your lists
specstreammcp_show_specstream_records
Results
specstreammcp_add_specstream_record_note
Add a record note
specstreammcp_apply_reconciliation
Fill a list from chosen pairs
specstreammcp_export_find
Download the results
specstreammcp_import_csv
Import a CSV or Excel file
specstreammcp_prepare_reconciliation
Compare two lists
specstreammcp_quote_imported_list
Price filling in an imported list
specstreammcp_quote_more_facts
Price more facts
specstreammcp_quote_more_results
Price more results
specstreammcp_quote_new_list
Price a new list
specstreammcp_quote_refresh
Price a refresh
specstreammcp_resolve_specstream_record_note
Resolve a record note
specstreammcp_save_web_source_list
Save a source preview as a list
specstreammcp_set_your_field
Mark records
specstreammcp_teach_web_source
Teach a website source
specstreammcp_update_specstream_settings
Save list settings
specstreammcp_cancel_find
Stop a run
specstreammcp_delete_specstream_record_note
Remove a record note
specstreammcp_edit_specstream_record_note
Edit your record note
specstreammcp_revoke_share
Stop sharing results
specstreammcp_run_imported_list
Fill in an imported list
specstreammcp_run_more_facts
Add facts to a list
specstreammcp_run_more_results
Get more results
specstreammcp_run_new_list
Run a new list
specstreammcp_run_refresh
Refresh a list
specstreammcp_share_find
Share results
Build your Agent
Same OAuth 2.1 vault and scoped tool list across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
const sk = new ScalekitClient(
process.env.SCALEKIT_ENVIRONMENT_URL,
process.env.SCALEKIT_CLIENT_ID,
process.env.SCALEKIT_CLIENT_SECRET,
);
const page = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["specstreammcp"], toolNames: [
"specstreammcp_compile", "specstreammcp_edit_spec", "specstreammcp_get_capacity_balance",
]}, pageSize: 100,
});
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";
const sk = new ScalekitClient(
process.env.SCALEKIT_ENVIRONMENT_URL,
process.env.SCALEKIT_CLIENT_ID,
process.env.SCALEKIT_CLIENT_SECRET,
);
const page = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["specstreammcp"], toolNames: [
"specstreammcp_compile", "specstreammcp_edit_spec", "specstreammcp_get_capacity_balance",
]}, pageSize: 100,
});
const openai = new OpenAI();
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";
const sk = new ScalekitClient(
process.env.SCALEKIT_ENVIRONMENT_URL,
process.env.SCALEKIT_CLIENT_ID,
process.env.SCALEKIT_CLIENT_SECRET,
);
const page = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["specstreammcp"], toolNames: [
"specstreammcp_compile", "specstreammcp_edit_spec", "specstreammcp_get_capacity_balance",
]}, pageSize: 100,
});
const anthropic = new Anthropic();
import { ScalekitClient } from "@scalekit-sdk/node";
const sk = new ScalekitClient(
process.env.SCALEKIT_ENVIRONMENT_URL,
process.env.SCALEKIT_CLIENT_ID,
process.env.SCALEKIT_CLIENT_SECRET,
);
const page = await sk.tools.listScopedTools("user_123", {
filter: { connectionNames: ["specstreammcp"], toolNames: [
"specstreammcp_compile", "specstreammcp_edit_spec", "specstreammcp_get_capacity_balance",
]}, pageSize: 100,
});
Try these prompts
Copy a prompt into your agent. Each one maps to SpecStream list research for the signed-in user.
Understand a request
Copy the prompt
Copied
Compile this request without running it: Series B fintech companies in India that hire ML engineers.
Copy the prompt
Copied
Read my natural-language list request and return the conditions and facts SpecStream will bring back.
Copy the prompt
Copied
Edit the last compile so company size is at least 50 employees without rewording the whole request.
Run and enrich lists
Copy the prompt
Copied
Run the find for EU climate-tech Series A startups and show the first 10 rows with sources.
Copy the prompt
Copied
Open collection for my last find and list which cells still need enrichment.
Copy the prompt
Copied
Import research from this spreadsheet URL into my current SpecStream project.
Reconcile and share
Copy the prompt
Copied
Reconcile my imported CRM list against the live web find and show field mismatches.
Copy the prompt
Copied
Check capacity balance before I start a 500-row enrichment run.
Copy the prompt
Copied
Share the finished find with my teammate as a read-only link.
SEE HOW AUTH WORKS
Your users connect once. Their SpecStream OAuth 2.1 tokens stay vaulted, every call is checked, and every action is logged.
1
Authorize
Your user connects
SpecStream MCP
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
SpecStream MCP
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
SpecStream MCP
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
SpecStream MCP
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
Reuse the same per-user OAuth 2.1 vault and audit chain on other Search connectors.
No items found.
Test other agents
Reuse the same per-user OAuth 2.1 vault and audit chain on other Search connectors.
No items found.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared SpecStream key makes every compile and find look like a bot. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_acct

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
SpecStream MCP today. Others tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access SpecStream MCP as the user or a shared key?
Per-user resolution. Each tool call uses the signed-in user's SpecStream OAuth 2.1 token, so list research attributes to that user in the audit log.
Where is the SpecStream token stored?
In Scalekit's AES-256 vault, namespaced per tenant. Tokens refresh automatically. You revoke access from one dashboard without rotating a shared secret across every agent.
Can I limit what the agent does in SpecStream MCP?
Yes. Filter tool names in listScopedTools (for example specstreammcp_compile only) and Scalekit checks that scope before the API call.
What happens when a user revokes access?
The next SpecStream tool call fails closed for that user. Other users and other connectors are unaffected. The revoke is logged.
Does SpecStream MCP include write and destructive tools?
Yes. Docs list 61 tools: 36 read, 15 write, and 10 destructive. Scope tool names tightly so agents only get the actions you intend.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""specstreammcp"": {
""url"": ""https://mcp.scalekit.com/specstreammcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.specstreammcp]
url = ""https://mcp.scalekit.com/specstreammcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""specstreammcp"": {
""url"": ""https://mcp.scalekit.com/specstreammcp"",
""type"": ""http""
}
}
}