Skip to content
Scalekit Docs

Tango MCP

Vendor MCP5 toolsAPI KeySearchAnalytics

Connect to Tango MCP by makegov to search federal contracts, opportunities, vehicles, organizations, and protests, and pull competitive...

Tango MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Register your Tango MCP credentials with Scalekit so it can authenticate requests on your behalf. You do this once per environment.

    Dashboard setup steps

    Register your Tango API key with Scalekit so it can authenticate and proxy federal procurement data requests on behalf of your users. Tango MCP uses API key authentication — there is no redirect URI or OAuth flow.

    1. Get a Tango API key

      • Go to the Tango developer portal and sign in.
      • Click Manage Account in the top navigation.
      • Under API Keys, your Default Key is shown — click Click to copy to copy it.
      • To create additional keys, click Manage API keys →.

      Tango developer portal showing the API Keys section with the Default Key and rate limit information

    2. Create a connection in Scalekit

      • In the Scalekit dashboard, go to AgentKitConnectionsCreate Connection.
      • Search for Tango MCP and click Create.
      • Note the Connection name — use this as connection_name in your code (e.g., tangomcp).
    3. Add a connected account

      Connected accounts link a specific user identifier in your system to a Tango API key. Add them via the dashboard for testing, or via the Scalekit API in production.

      Via dashboard (for testing)

      • Open the connection and click the Connected Accounts tab → Add account.
      • Fill in Your User’s ID and API Key, then click Save.

      Via API (for production)

      await scalekit.connect.upsertConnectedAccount({
      connectionName: 'tangomcp',
      identifier: 'user@example.com',
      credentials: { apiKey: 'your-tango-api-key' },
      })
  4. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'tangomcp'
    const identifier = 'user_123'
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'tangomcp_search',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Search opportunities — Search open federal pre-award procurement records — SAM.gov opportunities, procurement forecasts, DLA DIBBS RFQs/RFPs, and SBIR/STTR topics and solicitations
  • Resolve records — Find entities, vehicles, NAICS/PSC codes, GSA MAS SINs, contracts, opportunities, IDVs, OTAs, subawards, organizations, and GAO bid protests matching a search query
  • Get details — Get detailed information about a single item — entity, contract, IDV, vehicle, opportunity, OTA, OTIDV, organization, protest, SIN, GSA eLibrary contract, IT investment, NAICS/PSC code, budget account, DIBBS RFQ/RFP/award, SAM exclusion, or SBIR topic/solicitation
  • Fetch api docs — Fetch detailed Tango API documentation for a specific section

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

tangomcp_fetch_api_docs#Fetch detailed Tango API documentation for a specific section. Use when you need the full list of filtering parameters, valid enum values, ordering options, response shaping syntax, or advanced query patterns beyond what the tool descriptions provide.1 param

Fetch detailed Tango API documentation for a specific section. Use when you need the full list of filtering parameters, valid enum values, ordering options, response shaping syntax, or advanced query patterns beyond what the tool descriptions provide.

NameTypeRequiredDescription
sectionstringrequiredDocumentation section to retrieve. Valid values: 'budget_accounts', 'contracts', 'entities', 'forecasts', 'gsa-elibrary', 'idvs', 'itdashboard', 'lcats', 'metrics', 'opportunities', 'otas', 'otidvs', 'protests', 'resolve', 'response-shaping', 'subawards', 'vehicles'.
tangomcp_get_details#Get detailed information about a single item — entity, contract, IDV, vehicle, opportunity, OTA, OTIDV, organization, protest, SIN, GSA eLibrary contract, IT investment, NAICS/PSC code, budget account, DIBBS RFQ/RFP/award, SAM exclusion, or SBIR topic/solicitation. Use after search or resolve to drill into a specific record, optionally enriched with related data.9 params

Get detailed information about a single item — entity, contract, IDV, vehicle, opportunity, OTA, OTIDV, organization, protest, SIN, GSA eLibrary contract, IT investment, NAICS/PSC code, budget account, DIBBS RFQ/RFP/award, SAM exclusion, or SBIR topic/solicitation. Use after search or resolve to drill into a specific record, optionally enriched with related data.

NameTypeRequiredDescription
idstringrequiredThe identifier for the item — UEI, contract key, IDV key, vehicle UUID, opportunity ID, OTA key, OTIDV key, organization FH key, SIN code, GSA eLibrary contract UUID, IT investment UII, NAICS code, PSC code, or budget account id.
typestringrequiredThe item type to retrieve details for. Note: 'subaward' is not supported here — use the search tool with type='subaward' and award_key filter instead.
attachment_idsstringoptionalOpportunity only. Comma-separated attachment resource_ids (or exact filenames) to pull full extracted text for — the targeted alternative to include_attachment_text when you only need specific documents (Pro-tier).
attachment_offsetintegeroptionalOpportunity only, used with attachment_ids. Character offset into each selected document's extracted text — pass the next_offset reported under attachment_text.partial[] to continue reading a document larger than the per-call budget. Ignored without attachment_ids.
fieldsstringoptionalResponse shape for the primary item — comma-separated field names with optional nesting syntax (same as the search tool). Omit for comprehensive defaults.
include_attachment_textbooleanoptionalOpportunity only. When true, pulls the full extracted text of ALL file attachments inline (Pro-tier), capped by a per-call character budget.
include_relatedbooleanoptionalWhen true, enriches the response with related data from multiple endpoints (e.g. child awards for IDVs, socioeconomic status for entities, related opportunities for protests).
monthsintegeroptionalTrailing window in months for spending-trend metrics (applies to entity, naics, and psc types). Default 24.
periodstringoptionalMetric bucketing period for time-series data — 'year', 'quarter', or 'month'. Default 'year'.
tangomcp_resolve#Find entities, vehicles, NAICS/PSC codes, GSA MAS SINs, contracts, opportunities, IDVs, OTAs, subawards, organizations, and GAO bid protests matching a search query. Use this tool first when you have a name or keyword and need to discover what's in the data — returns identifiers (UEI, organization key, etc.) you can use with other tools.3 params

Find entities, vehicles, NAICS/PSC codes, GSA MAS SINs, contracts, opportunities, IDVs, OTAs, subawards, organizations, and GAO bid protests matching a search query. Use this tool first when you have a name or keyword and need to discover what's in the data — returns identifiers (UEI, organization key, etc.) you can use with other tools.

NameTypeRequiredDescription
querystringrequiredFree text search — company name, organization name, vehicle name, NAICS code or keyword, PSC code, SIN code, etc.
limitintegeroptionalMaximum number of results to return per entity type. Defaults to 5.
typestringoptionalOptional filter to restrict search to a specific entity type. When omitted, searches all types except itdashboard.
tangomcp_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.48 params

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.

NameTypeRequiredDescription
activestringoptionalFilter active or inactive opportunities.
activitystringoptionalSBIR 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_afterstringoptionalAnticipated award date lower bound (YYYY-MM-DD, forecasts only).
award_date_beforestringoptionalAnticipated award date upper bound (YYYY-MM-DD, forecasts only).
buyer_codestringoptionalDLA buyer code (dibbs_rfp only).
cycle_namestringoptionalSolicitation cycle name (sbir_solicitation only).
doc_sourcestringoptionalSource document collection (sbir_topic only).
fieldsstringoptionalResponse 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_afterstringoptionalFirst notice date lower bound (YYYY-MM-DD).
first_notice_date_beforestringoptionalFirst notice date upper bound (YYYY-MM-DD).
fiscal_yearstringoptionalExact fiscal year match (forecasts only).
fiscal_year_endstringoptionalFiscal year range end (forecasts only).
fiscal_year_startstringoptionalFiscal year range start (forecasts only).
keywordstringoptionalSearch text across titles and descriptions of opportunities.
last_notice_date_afterstringoptionalLast notice date lower bound (YYYY-MM-DD).
last_notice_date_beforestringoptionalLast notice date upper bound (YYYY-MM-DD).
limitintegeroptionalMax results to return (default 25).
modified_afterstringoptionalModified date lower bound (YYYY-MM-DD, forecasts only).
modified_beforestringoptionalModified date upper bound (YYYY-MM-DD, forecasts only).
naics_codesstringoptionalList of NAICS codes to filter by.
naics_starts_withstringoptionalNAICS code prefix filter (forecasts only).
notice_typestringoptionalFilter 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).
nsnstringoptionalNational Stock Number, exact (dibbs_rfq/dibbs_rfp only). Use '|' for OR.
orderingstringoptionalOrdering field (for example: last_notice_date or -response_deadline).
orgstringoptionalOrganization filter — accepts a code, name, or abbreviation (e.g. "VA", "CMS", "7500").
organizationstringoptionalFederal-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_cyclestringoptionalWhether the solicitation is out of cycle (sbir_solicitation only).
part_numberstringoptionalManufacturer part number, exact (dibbs_rfq/dibbs_rfp only).
place_of_performancestringoptionalPlace of performance text filter.
programstringoptional'SBIR' or 'STTR' (sbir_solicitation only). Topics have no program filter; filter topics via solicitation_number instead.
psc_codesstringoptionalList of PSC codes to filter by.
purchase_requeststringoptionalPurchase request number (dibbs_rfq only).
quantity_maxstringoptionalMaximum quantity requested (dibbs_rfq only).
quantity_minstringoptionalMinimum quantity requested (dibbs_rfq only).
release_date_afterstringoptionalRelease-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_beforestringoptionalRelease-date upper bound (sbir_topic only).
response_deadline_afterstringoptionalOnly include opportunities due after this date (YYYY-MM-DD).
response_deadline_beforestringoptionalInclude opportunities due before this date (YYYY-MM-DD).
set_aside_flagstringoptionalDIBBS 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_typesstringoptionalList of set-aside type codes to filter by (e.g. ["SBA", "8AN"]). See tango://reference/set-asides for valid codes.
solicitation_numberstringoptionalSolicitation number filter.
solicitation_statusstringoptionalsbir.gov's own raw Open/Closed string (SBIR only). Source data, distinct from the derived activity field — they can disagree.
source_systemstringoptionalSource system filter (forecasts only).
statusstringoptionalStatus filter (forecasts only). Examples: "Draft", "Final".
status_codestringoptional11-character composite DIBBS status code, e.g. 'DLK00L1N000' (dibbs_rfq only). Unrelated to status and solicitation_status.
topic_numberstringoptionalSBIR topic number, exact (sbir_topic only).
typestringoptionalWhat to search — "opportunity" (default), "forecast", "dibbs_rfq", "dibbs_rfp", "sbir_topic", or "sbir_solicitation".
yearstringoptionalSolicitation year, exact (SBIR only). Not a fiscal year — use fiscal_year for forecasts.