Tango MCP

Live

OAUTH 2.0

PRODUCTIVITY

Search

Connect to Tango MCP to create, edit, and publish step-by-step workflow guides and SOPs directly from your AI agent workflows.

  • Acts as the user: Every tool call runs as the authorizing user. Access and audit trail stay intact.
  • Credentials stay vaulted: AES-256 encrypted, resolved at request time, never stored in LLM context.
  • Scoped before every call: Per-user permissions enforced automatically. 90-day audit trail included.
Tango MCP
agent · Acme Q3
Run
Fetch Api Docs in Tango MCP
S
tangomcp_fetch_api_docs
85ms
Tango MCP agent
Fetch detailed tango api documentation for a specific section. use when you need the full list of filtering parameters, .
Sources: Tango MCP
tangomcpmcp
1 tool call
18:29
Message Claude...

Tango MCP tools for AI agents

CALL ANY TOOL
8 tools covering create, publish, get.
tangomcp_search_opportunities
Search opportunities
Search open federal pre-award procurement records : SAM.gov opportunities, procurement forecasts, DLA DIBBS RFQs/RFPs, and SBIR/STTR topics and solicitations. Filter by organization, NAICS/PSC code, set-aside type, notice type, place of performance, response deadline, and family-specific filters (nsn/part_number for DIBBS, topic_number/program for SBIR). Returns a list of matching records with total count.
Parameters
Name
Type
Required
Description
active
string
Optional
Filter active or inactive opportunities.
activity
string
Optional
SBIR lifecycle, derived at query time : 'open', 'closed', or (topics only) 'unknown' for topics with no usable date roster (SBIR only). Prefer this over active for SBIR.
award_date_after
string
Optional
Anticipated award date lower bound (YYYY-MM-DD, forecasts only).
award_date_before
string
Optional
Anticipated award date upper bound (YYYY-MM-DD, forecasts only).
buyer_code
string
Optional
DLA buyer code (dibbs_rfp only).
cycle_name
string
Optional
Solicitation cycle name (sbir_solicitation only).
doc_source
string
Optional
Source document collection (sbir_topic only).
fields
string
Optional
Response shape : specify which fields to return. Valid top-level fields: opportunity_id, title, description, solicitation_number, naics_code, psc_code, set_aside, response_deadline, first_notice_date, last_notice_date, active, award_number, notice_history, office, place_of_performance, primary_contact, attachments, meta, sam_url. Use "office(*)" to get agency, department, and office details. Omit for sensible defaults.
first_notice_date_after
string
Optional
First notice date lower bound (YYYY-MM-DD).
first_notice_date_before
string
Optional
First notice date upper bound (YYYY-MM-DD).
fiscal_year
string
Optional
Exact fiscal year match (forecasts only).
fiscal_year_end
string
Optional
Fiscal year range end (forecasts only).
fiscal_year_start
string
Optional
Fiscal year range start (forecasts only).
keyword
string
Optional
Search text across titles and descriptions of opportunities.
last_notice_date_after
string
Optional
Last notice date lower bound (YYYY-MM-DD).
last_notice_date_before
string
Optional
Last notice date upper bound (YYYY-MM-DD).
limit
integer
Optional
Max results to return (default 25).
modified_after
string
Optional
Modified date lower bound (YYYY-MM-DD, forecasts only).
modified_before
string
Optional
Modified date upper bound (YYYY-MM-DD, forecasts only).
naics_codes
string
Optional
List of NAICS codes to filter by.
naics_starts_with
string
Optional
NAICS code prefix filter (forecasts only).
notice_type
string
Optional
Filter by notice type. Accepts a single-letter code or human-readable name. Codes: p (Pre solicitation), k (Combined Synopsis/Solicitation), o (Solicitation), a (Award Notice), m (Modification/Amendment/Cancel), r (Sources Sought), s (Special Notice), u (Justification), i (Intent to Bundle), g (Sale of Surplus Property).
nsn
string
Optional
National Stock Number, exact (dibbs_rfq/dibbs_rfp only). Use '|' for OR.
ordering
string
Optional
Ordering field (for example: last_notice_date or -response_deadline).
org
string
Optional
Organization filter : accepts a code, name, or abbreviation (e.g. "VA", "CMS", "7500").
organization
string
Optional
Federal-hierarchy key of the DLA buying organization (DIBBS only). Not the same as org : DIBBS is always DLA, so this narrows within DLA.
out_of_cycle
string
Optional
Whether the solicitation is out of cycle (sbir_solicitation only).
part_number
string
Optional
Manufacturer part number, exact (dibbs_rfq/dibbs_rfp only).
place_of_performance
string
Optional
Place of performance text filter.
program
string
Optional
'SBIR' or 'STTR' (sbir_solicitation only). Topics have no program filter; filter topics via solicitation_number instead.
psc_codes
string
Optional
List of PSC codes to filter by.
purchase_request
string
Optional
Purchase request number (dibbs_rfq only).
quantity_max
string
Optional
Maximum quantity requested (dibbs_rfq only).
quantity_min
string
Optional
Minimum quantity requested (dibbs_rfq only).
release_date_after
string
Optional
Release-date lower bound (sbir_topic only). A topic is released, then opens, then closes : this is the earliest of the three, distinct from first_notice_date_*.
release_date_before
string
Optional
Release-date upper bound (sbir_topic only).
response_deadline_after
string
Optional
Only include opportunities due after this date (YYYY-MM-DD).
response_deadline_before
string
Optional
Include opportunities due before this date (YYYY-MM-DD).
set_aside_flag
string
Optional
DIBBS set-aside flag : 'Y' or 'N' (dibbs_rfq only). A yes/no flag, not a set-aside program type; use set_aside_types for 8(a)/SDVOSB/etc. on opportunities.
set_aside_types
string
Optional
List of set-aside type codes to filter by (e.g. ["SBA", "8AN"]). See tango://reference/set-asides for valid codes.
solicitation_number
string
Optional
Solicitation number filter.
solicitation_status
string
Optional
sbir.gov's own raw Open/Closed string (SBIR only). Source data, distinct from the derived activity field : they can disagree.
source_system
string
Optional
Source system filter (forecasts only).
status
string
Optional
Status filter (forecasts only). Examples: "Draft", "Final".
status_code
string
Optional
11-character composite DIBBS status code, e.g. 'DLK00L1N000' (dibbs_rfq only). Unrelated to status and solicitation_status.
topic_number
string
Optional
SBIR topic number, exact (sbir_topic only).
type
string
Optional
What to search : "opportunity" (default), "forecast", "dibbs_rfq", "dibbs_rfp", "sbir_topic", or "sbir_solicitation".
year
string
Optional
Solicitation year, exact (SBIR only). Not a fiscal year : use fiscal_year for forecasts.
tangomcp_get_details
Get details
tangomcp_search
Search
tangomcp_resolve
Resolve
tangomcp_fetch_api_docs
Fetch api docs
Build your Agent
Same auth pattern across every framework.
Python · LlamaIndex
from langchain_mcp_adapters.client import MultiServerMCPClient
from scalekit import ScalekitClient

client = ScalekitClient(env_url=ENV_URL, client_id=CLIENT_ID, client_secret=SECRET)
token = client.agent.get_token(user_id="user_id", connector="tangomcp")

mcp = MultiServerMCPClient({
"tangomcp": {
"url": "https://mcp.scalekit.com/tangomcp",
"headers": {"Authorization": "Bearer " + token}
}
})
tools = await mcp.get_tools()
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const client = new ScalekitClient({ envUrl, clientId, clientSecret });
const token = await client.agent.getToken({ userId: "user_id", connector: "tangomcp" });

const openai = new OpenAI();
// Connect to MCP at https://mcp.scalekit.com/tangomcp
// Pass: Authorization: Bearer + token
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const client = new ScalekitClient({ envUrl, clientId, clientSecret });
const token = await client.agent.getToken({ userId: "user_id", connector: "tangomcp" });

const anthropic = new Anthropic();
// Connect to MCP at https://mcp.scalekit.com/tangomcp
// Pass: Authorization: Bearer + token
from google.adk.agents import LlmAgent
from scalekit import ScalekitClient

client = ScalekitClient(env_url=ENV_URL, client_id=CLIENT_ID, client_secret=SECRET)
token = client.agent.get_token(user_id="user_id", connector="tangomcp")
# Connect to MCP at https://mcp.scalekit.com/tangomcp
# Pass: Authorization: Bearer + token
Try these prompts
Paste any prompt into your agent to get started.
Get started
Copy the prompt
Copied
Search open federal procurement opportunities and forecasts?
Copy the prompt
Copied
Find entities, vehicles, NAICS/PSC codes, GSA MAS SINs, contracts, opportunities, IDVs, OTAs, subawards, organizations, ?
Advanced
Copy the prompt
Copied
Get detailed information about a single item — entity, contract, IDV, vehicle, opportunity, OTA, OTIDV, organization, pr?
Copy the prompt
Copied
Fetch detailed Tango API documentation for a specific section?
SEE HOW AUTH WORKS
User authorises once. Every agent call after uses their token with scope enforcement.
1
Authorize
Your user connects
Tango 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
Tango 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
Tango 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
Tango 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
See the same per-user auth pattern across other connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
GTM and RevOps Teams
Deal intelligence agent
Pulls recent Gong calls, scores deal risk with an LLM, cross-references the record in Attio, and DMs each owner their at-risk deals in Slack. Every read is scoped to that rep's own access.
Support and Ops Teams
Support triage agent
Fetches new Zendesk tickets, classifies them by type and urgency, searches the Notion knowledge base for an answer, and routes what it cannot resolve to Slack. Every call runs on the support agent's own delegated OAuth.
Test other agents
See the same per-user auth pattern across other connectors.
SALES
Deal intelligence agent
Score Gong call risk with an LLM, cross-reference the Attio record, and DM each owner their at-risk deals in Slack.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
SUPPORT
Support triage agent
Classify new Zendesk tickets, search the Notion knowledge base for an answer, and route what it cannot resolve to Slack.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared token looks fine in a demo. In production every call looks like a service account. Scalekit resolves the real user credential.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
One connector today. Ten 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 Tango as the user or as a shared key?
As the user. Each workspace member authorizes once and Scalekit resolves their credential at request time. Audit logs attribute every action to that user, not a shared service account.

Where is the Tango OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Tokens never appear in prompts, logs, or LLM context.

Can I limit what the agent is allowed to do in Tango?
Yes. Pass a tool name filter to listScopedTools so the research agent only sees the subset you authorize. Pre-API-call scope checks block out-of-policy actions before the request reaches Tango.

What happens when a user revokes Tango access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.

Is federal contract search data scoped per user?
Yes. Searches for opportunities, vehicles, and protests run with the authorizing user's Tango credential, so saved views and rate limits stay per analyst, never pooled.

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"": {
""tangomcp"": {
""url"": ""https://mcp.scalekit.com/tangomcp"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.tangomcp]
url = ""https://mcp.scalekit.com/tangomcp""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""tangomcp"": {
""url"": ""https://mcp.scalekit.com/tangomcp"",
""type"": ""http""
}
}
}