@pipeworx/gsa-elibrary

Connect: https://pipeworx.io/mcp — every tool in the catalog, including @pipeworx/gsa-elibrary’s. Install: one-click buttons

Connect to just the @pipeworx/gsa-elibrary pack

https://gateway.pipeworx.io/gsa-elibrary/mcp — only @pipeworx/gsa-elibrary’s own tools, nothing else in the catalog.

No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.

Tools: 3

Who currently holds a GSA Multiple Award Schedule (MAS) contract and can bid on task orders — the complement to usaspending’s past-award data and to gsa-calc’s labor-rate-only coverage.

Tools

  • gsa_schedule_search(keyword, search_type?) — search by keyword, SIN number, NAICS code, or contractor/manufacturer name. Returns matching MAS/GWAC categories and SINs, plus contractor matches with contract numbers — the starting point for finding a valid schedule/SIN pair.
  • gsa_schedule_contract_holders(sin, schedule?, keyword?, limit?, offset?) — every contract holder currently listed under a SIN, with contract number, phone, city and state. keyword filters client-side against name, contract number, city, or state. schedule defaults to "MAS".
  • gsa_contractor_profile(contractor_name, contract_number?, sin?, schedule?) — every schedule/GWAC a contractor holds and its contract number on each, plus which of those contracts are closed to new awards. Pass a sin (and schedule) already known to be held by the contractor to also pull phone/city/state from that SIN’s contract-holder listing. Address, email, website, SAM UEI, NAICS, socio-economic/exclusion-list status, and option-period end date are not available from this tool — see “Behaviour worth knowing” below.

Auth

Keyless. No login, no API key, no CAPTCHA.

Data sources

  • GSA, eLibrary — the public Multiple Award Schedule / GWAC contract-holder directory. Every page answers a bare, unauthenticated request; nothing is mirrored or cached beyond the length of one call.

Behaviour worth knowing

  • No JSON API. eLibrary is a legacy server-rendered site with no documented API for contract-holder data (a separate, undocumented search_categories-style endpoint covers SIN/category metadata only, not contractors). This pack parses the same HTML pages a browser would load.
  • The site’s own “Download Contractors (xls/csv)” link needs a continued session cookie from the page that rendered it — fetched cold it returns “System Error: Unable to access GSA eLibrary”. The per-SIN listing page needs no such continuity: it is a plain GET with no CSRF token, and it already renders the FULL contractor list for a SIN on one page with no server-side pagination (measured live: SIN 541511 returns 341 rows at ~70KB; SIN 541611 returns 3,107 rows in one ~5.2MB response, which this pack still parses in single-digit milliseconds). limit/offset are applied after parsing, the way the upstream itself would if it supported paging.
  • eLibrary’s per-contract detail page is blocked from our network. Measured live post-deploy: the search-results page and the per-SIN listing page both answer (the search page occasionally 403s once and then clears on a retry — this pack retries that one, bounded to a single attempt so a real block still fails loudly), but the per-contractor detail page returns HTTP 403 on every attempt. gsa_contractor_profile does not call it at all — it builds the profile from the two reachable routes instead (a contractor-name search for schedule/contract-number associations, plus an optional per-SIN lookup for phone/city/state), and the response’s fields_unavailable list plus note say plainly which fields that combination cannot supply. If the search itself is also blocked after its one retry, the tool returns found: false with a note saying so, rather than surfacing a raw 403.
  • A SIN’s category description can run past 1,000 characters with no <br>/closing tag inside the first few hundred. Title and description are parsed as two separately-bounded windows rather than one combined pattern, so a long description can’t cause the whole match (including the short title/SIN) to silently fail.
  • The contractor-listing table’s columns are not fixed — some SINs insert an extra “Disaster Purchasing” icon cell between the name and contract-number cells, some don’t. Rows are parsed by locating each contractor link and reading only the text between it and the next one, rather than assuming a fixed column offset.

Tools

  • gsa_schedule_search — Search GSA eLibrary by keyword, SIN number, NAICS code, or contractor/manufacturer name. Returns matching Multiple Award Schedule (MAS) categories/SINs and contractor matches with contract numbers — t
  • gsa_schedule_contract_holders — List Multiple Award Schedule contract holders for a given SIN (Special Item Number), optionally narrowed by a keyword matched against contractor name, contract number, city, or state. Returns each hol
  • gsa_contractor_profile — Look up which GSA Multiple Award Schedule(s)/GWAC(s) a contractor holds and its contract number(s) on each. Pass a known sin (and schedule) to also pull phone/city/state from that SIN’s contract-h

Tools

  • gsa_contractor_profile — Look up which GSA Multiple Award Schedule(s)/GWAC(s) a contractor holds and its contract number(s) on each. Pass a known `sin` (and `schedule`) to also pull phone/city/state from that SIN's contract-h
  • gsa_schedule_contract_holders — List Multiple Award Schedule contract holders for a given SIN (Special Item Number), optionally narrowed by a keyword matched against contractor name, contract number, city, or state. Returns each hol
  • gsa_schedule_search — Search GSA eLibrary by keyword, SIN number, NAICS code, or contractor/manufacturer name. Returns matching Multiple Award Schedule (MAS) categories/SINs and contractor matches with contract numbers — t

Regenerated from source · build October 19, 2026