mcpField
A
alterlab-usfiscaldata

alterlab-usfiscaldata

github.com/alterlab-ieuData & databases7867 installsUpdated 5w ago
Repository

About alterlab-usfiscaldata

A skill for querying the U.S. Treasury Fiscal Data REST API, intended for users analyzing federal financial data. It covers debt, Treasury statements, rates, auctions, and savings bonds, with examples for filtering, pagination, and loading results.

Key features

  1. 01Debt and Treasury statement data
  2. 02Interest and exchange rates
  3. 03Auction and savings bond data
  4. 04Field selection and filtering
  5. 05Sorting and paginated retrieval

Use cases

  1. 01Tracking changes in federal debt
  2. 02Reviewing Treasury cash flows
  3. 03Analyzing auction results and rates
  4. 04Loading fiscal data into a DataFrame

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/alterlab-ieu/alterlab-academic-skills --skill alterlab-usfiscaldata

After installing, type/alterlab-usfiscaldatain Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

evals/
evals.json
references/
api-basics.md
datasets-debt.md
datasets-fiscal.md
datasets-interest-rates.md
datasets-securities.md
examples.md
parameters.md
response-format.md

Details

From the project README

U.S. Treasury Fiscal Data API

Free, open REST API from the U.S. Department of the Treasury for federal financial data. No API key or registration required.

Base URL: https://api.fiscaldata.treasury.gov/services/api/fiscal_service

The catalog held 56 datasets / 183 data tables when checked on 2026-09-23; browse https://fiscaldata.treasury.gov/datasets/ for the current list and each table's endpoint version (v1 or v2).

When to Use This Skill

  • Federal debt (Debt to the Penny, historical debt outstanding, schedules of federal debt)
  • Daily and Monthly Treasury Statements: operating cash balance, deposits/withdrawals, receipts, outlays, deficit
  • Treasury securities auctions (results and upcoming), average interest rates, interest expense
  • Treasury Reporting Rates of Exchange, savings bonds, I bond rates
Does NOT Trigger
ScenarioUse Instead
Market yields (DGS10), Fed funds, or macro series by FRED ID with transformationsalterlab-fred
Market quotes or daily FX/crypto prices from a commercial feedalterlab-alpha-vantage
Hedge-fund leverage or repo-market aggregates (Form PF, FICC)alterlab-hedgefund-monitor
Company filings and financial statements from SEC EDGARalterlab-edgartools

Quick Start

import requests
import pandas as pd

BASE_URL = "https://api.fiscaldata.treasury.gov/services/api/fiscal_service"

# Get the current national debt (Debt to the Penny)
resp = requests.get(f"{BASE_URL}/v2/accounting/od/debt_to_penny", params={
    "sort": "-record_date",
    "page[size]": 1
})
data = resp.json()["data"][0]
print(f"Total public debt as of {data['record_date']}: ${float(data['tot_pub_debt_out_amt']):,.0f}")
# Get Treasury exchange rates for recent quarters
resp = requests.get(f"{BASE_URL}/v1/accounting/od/rates_of_exchange", params={
    "fields": "country_currency_desc,exchange_rate,record_date",
    "filter": "record_date:gte:2024-01-01",
    "sort": "-record_date",
    "page[size]": 100
})
df = pd.DataFrame(resp.json()["data"])

Authentication

None required. The API is fully open and free.

Core Parameters

ParameterExampleDescription
fields=fields=record_date,tot_pub_debt_out_amtSelect specific columns
filter=filter=record_date:gte:2024-01-01Filter records
sort=sort=-record_dateSort (prefix - for descending)
format=format=jsonOutput format: json, csv, xml
page[size]=page[size]=100Records per page (default 100, max 10000)
page[number]=page[number]=2Page index (starts at 1)

Filter operators: lt, lte, gt, gte, eq, in

# Multiple filters separated by comma
"filter=country_currency_desc:in:(Canada-Dollar,Mexico-Peso),record_date:gte:2024-01-01"

Key Datasets & Endpoints

Debt
DatasetEndpointFrequency
Debt to the Penny/v2/accounting/od/debt_to_pennyDaily
Historical Debt Outstanding/v2/accounting/od/debt_outstandingAnnual
Schedules of Federal Debt/v1/accounting/od/schedules_fed_debtMonthly
Daily & Monthly Statements
DatasetEndpointFrequency
DTS Operating Cash Balance/v1/accounting/dts/operating_cash_balanceDaily
DTS Deposits & Withdrawals/v1/accounting/dts/deposits_withdrawals_operating_cashDaily
Monthly Treasury Statement (MTS)/v1/accounting/mts/mts_table_1 (16 tables)Monthly
Interest Rates & Exchange
DatasetEndpointFrequency
Average Interest Rates on Treasury Securities/v2/accounting/od/avg_interest_ratesMonthly
Treasury Reporting Rates of Exchange/v1/accounting/od/rates_of_exchangeQuarterly
Interest Expense on Public Debt/v2/accounting/od/interest_expenseMonthly
Securities & Auctions
DatasetEndpointFrequency
Treasury Securities Auctions Data/v1/accounting/od/auctions_queryAs Needed
Treasury Securities Upcoming Auctions/v1/accounting/od/upcoming_auctionsAs Needed
Average Interest Rates/v2/accounting/od/avg_interest_ratesMonthly
Savings Bonds
DatasetEndpointFrequency
I Bonds Interest Rates/v1/accounting/od/i_bonds_interest_ratesSemi-Annual
U.S. Treasury Savings Bonds: Issues, Redemptions & Maturities/v1/accounting/od/savings_bonds_reportMonthly

Response Structure

{
  "data": [...],
  "meta": {
    "count": 100,
    "total-count": 3790,
    "total-pages": 38,
    "labels": {"field_name": "Human Readable Label"},
    "dataTypes": {"field_name": "STRING|NUMBER|DATE|CURRENCY"},
    "dataFormats": {"field_name": "String|10.2|YYYY-MM-DD"}
  },
  "links": {"self": "...", "first": "...", "prev": null, "next": "...", "last": "..."}
}

Note: All values are returned as strings. Convert as needed (e.g., float(), pd.to_datetime()). Null values appear as the string "null".

Common Patterns

Load all pages into a DataFrame
def fetch_all_pages(endpoint, params=None):
    params = dict(params or {})
    params["page[size]"] = 10000  # the API maximum; larger values return HTTP 400
    params["page[number]"] = 1
    rows = []
    while True:
        resp = requests.get(f"{BASE_URL}{endpoint}", params=params, timeout=60)
        resp.raise_for_status()
        result = resp.json()
        rows.extend(result["data"])
        if params["page[number]"] >= result["meta"]["total-pages"]:
            break
        params["page[number]"] += 1
    return pd.DataFrame(rows)
Aggregation (automatic sum)

Omitting grouping fields triggers automatic aggregation:

# Sum all deposits/withdrawals by record_date and transaction type
resp = requests.get(f"{BASE_URL}/v1/accounting/dts/deposits_withdrawals_operating_cash", params={
    "fields": "record_date,transaction_type,transaction_today_amt"
})

Reference Files

Cite the dataset name, table, and retrieval date (Fiscal Data values are revised; keep the record_date you used).

Part of the AlterLab Academic Skills suite.

Comments

Markdown supported