Resources
The MCP spec has three nouns: Tools (do things), Resources (read citable entities), Prompts (workflow templates). Most MCP servers ship Tools and stop.
Pipeworx implements Resources as well — every meaningful entity in the catalog is addressable by a stable pipeworx:// URI. Agents can:
- Cite entities in their output by URI (citations stay valid across sessions and tool changes)
- Re-fetch content via
resources/readwhen needed - Embed URIs in
remember/recallmemory or pass them to other agents - Hand off state to humans — a URI is shareable and auditable
How it works
A Pipeworx client calls resources/templates/list to discover available URI patterns:
// Returns 15+ templates
[
{ uriTemplate: "pipeworx://edgar/company/{cik}/filings", ... },
{ uriTemplate: "pipeworx://edgar/company/{cik}/facts", ... },
{ uriTemplate: "pipeworx://clinicaltrials/study/{nct_id}", ... },
{ uriTemplate: "pipeworx://fred/series/{series_id}", ... },
{ uriTemplate: "pipeworx://rxnorm/concept/{rxcui}", ... },
{ uriTemplate: "pipeworx://uspto/patent/{number}", ... },
{ uriTemplate: "pipeworx://semantic-scholar/paper/{paper_id}", ... },
// ...
]
The agent then constructs a concrete URI and calls resources/read:
resources/read({ uri: "pipeworx://clinicaltrials/study/NCT04280705" })
// → { contents: [{ uri, mimeType: "application/json", text: "<full study record>" }] }
The gateway parses the URI, dispatches to the underlying tool (ct_get_study in this case), and wraps the response in resource shape.
Why URIs and not tool calls?
The same data is reachable via direct tool call (ct_get_study({nct_id: "NCT04280705"})). The URI form has three properties tools don’t:
- Stable across sessions. A URI in your output can be re-fetched by anyone, anytime. A tool call needs the agent’s context to make sense.
- Embeddable in text. Agents naturally write “per pipeworx://edgar/company/0000320193/filings” — humans and other agents follow it.
- Portable across servers. Other MCP servers that support Resources can reference Pipeworx URIs in their own outputs. Agents bridge them automatically.
Pattern: resolve_entity + URI embedding
The resolve_entity meta-tool returns a resources block alongside IDs:
resolve_entity({ type: "company", value: "AAPL" })
// → {
// ids: { cik: "0000320193", ticker: "AAPL", company_name: "Apple Inc." },
// resources: {
// edgar_filings: "pipeworx://edgar/company/0000320193/filings",
// edgar_facts: "pipeworx://edgar/company/0000320193/facts"
// }
// }
The agent’s natural output then becomes:
Apple (filings, XBRL facts) reported revenue of $383.3B in FY 2023.
Stable, citable, machine-and-human-readable.
Templates currently exposed
| URI | Source | Free? |
|---|---|---|
pipeworx://fred/series/{series_id} | FRED | BYO key |
pipeworx://fred/series/{series_id}/observations | FRED | BYO key |
pipeworx://clinicaltrials/study/{nct_id} | ClinicalTrials.gov | Yes |
pipeworx://rxnorm/concept/{rxcui} | RxNorm | Yes |
pipeworx://rxnorm/concept/{rxcui}/interactions | RxNorm | Yes |
pipeworx://uspto/patent/{number} | USPTO | Yes |
pipeworx://edgar/company/{ticker_or_cik}/filings | SEC EDGAR | Yes |
pipeworx://edgar/company/{cik}/facts | SEC EDGAR | Yes |
pipeworx://federal-register/document/{number} | Federal Register | Yes |
pipeworx://semantic-scholar/paper/{paper_id} | Semantic Scholar | Yes |
pipeworx://crossref/work/{doi} | Crossref | Yes |
pipeworx://openalex/work/{work_id} | OpenAlex | Yes |
pipeworx://wikipedia/article/{title} | Wikipedia | Yes |
pipeworx://nasa/asteroid/{id} | NASA | Yes |
pipeworx://gutenberg/book/{book_id} | Project Gutenberg | Yes |
More templates added as the catalog grows. Missing one? File via pipeworx_feedback.