Citations with pipeworx:// URIs

Agents using Pipeworx should cite their sources. The standard pattern is to embed pipeworx:// Resource URIs in output. They’re stable, machine-resolvable, and survive tool changes.

The pattern

Agents do this:

Apple (EDGAR filings) reported revenue of $383.3B in FY 2023.

Not this:

Per a tool I called called edgar_company_filings with cik 0000320193, Apple’s revenue was $383.3B.

The first version is durable. Anyone (or any agent) can resources/read the URI and get the current state. The second version is just opaque text.

How agents discover URIs

Three paths:

From resolve_entity

resolve_entity({ type: "company", value: "AAPL" })
// → { resources: {
//       edgar_filings: "pipeworx://edgar/company/0000320193/filings",
//       edgar_facts:   "pipeworx://edgar/company/0000320193/facts"
//     }
//   }

These URIs are ready to embed.

From the resource template list

resources/templates/list()
// → the current template list, which the agent can fill in itself

For example, the agent fills pipeworx://clinicaltrials/study/{nct_id} with an NCT it discovered earlier and embeds the URI in output.

From ask_pipeworx, when the routed tool has a template

ask_pipeworx puts a ready-to-embed URI in _meta.provenance.citation_uri:

ask_pipeworx({ question: "What SEC filings has Apple filed recently?" })
// → _meta.provenance.citation_uri === "pipeworx://edgar/company/AAPL/filings"

Treat this field as optional, and never as your check that the call worked. It is present only when the tool the router happened to pick is one of the templates below — 16 templates against a catalog of ~5,900 tools — so most answers carry no citation_uri, and that is normal rather than a failure.

Absence is not even stable per question, because routing is not. Asking “What is the current US unemployment rate?” five times in a row returns the FRED series (pipeworx://fred/series/UNRATE/observations), the macro_snapshot composite (no template, so no URI), or the BLS series — same question, different tool, citation present or absent accordingly.

What is always present is the rest of _meta.provenance: source (the publisher), upstream (the exact URL called) and replay (the arguments to re-run it). Cite from those when citation_uri is missing.

Available templates

pipeworx://fred/series/{series_id}
pipeworx://fred/series/{series_id}/observations
pipeworx://clinicaltrials/study/{nct_id}
pipeworx://rxnorm/concept/{rxcui}
pipeworx://uspto/patent/{number}
pipeworx://edgar/company/{ticker_or_cik}/filings
pipeworx://edgar/company/{cik}/facts
pipeworx://edgar/company/{cik}/facts/{concept}
pipeworx://edgar/company/{cik}/filings/{accession}
pipeworx://edgar/company/{cik}
pipeworx://gleif/lei/{lei}
pipeworx://federal-register/document/{number}
pipeworx://semanticscholar/paper/{paper_id}
pipeworx://openalex/work/{work_id}
pipeworx://wikipedia/article/{title}
pipeworx://gutenberg/book/{book_id}

See Resources for the full list and how resources/read resolves them.

Citation styles

Inline (preferred for prose):

Per pipeworx://fred/series/MORTGAGE30US, the 30-year mortgage rate was 7.12% as of 2026-05-08.

Trailing reference list (preferred for structured reports):

Mortgage rate: 7.12%1

Both work. Pick one and stay consistent within a single output. The rate and date in these examples are illustrative — your call returns the current values.

What clients do with the URIs

MCP clients that support resources/read (Claude Desktop 1.0+, Cline, the Claude Agent SDK, raw JSON-RPC clients) can fetch the resource:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/read",
  "params": { "uri": "pipeworx://fred/series/MORTGAGE30US" }
}

The gateway dispatches to the underlying tool (fred_series_info in this case) and wraps the response in a resource envelope. So agents reading another agent’s output can re-verify any claim.

What about non-MCP clients?

Plain links to pipeworx.io/llms.txt or specific pack pages also work for general human readability. But within the MCP ecosystem, pipeworx:// URIs are first-class.

Avoid these citation antipatterns

  • Don’t cite tool calls — agents shouldn’t say “I called fred_get_series with series_id=MORTGAGE30US”; that’s implementation detail. Cite the resource URI or the underlying source.
  • Don’t paraphrase the source — if you say “per FRED” and the data was actually pulled from BLS, that’s wrong. Cite what you actually used.
  • Don’t make up URIs — only embed pipeworx:// URIs that the gateway returned to you in resources blocks or via resources/templates/list.

Footnotes

  1. pipeworx://fred/series/MORTGAGE30US (FRED, U.S. Treasury, May 8 2026)

Last reviewed September 8, 2026