nport
nport
Нормализованный граф позиций фондов и поставщиков услуг, построенный на основе форм SEC N-PORT и N-CEN, объединённый с реестром LEI от GLEIF и предоставляемый агентам через MCP.
Дизайн: docs/design.md. Эмпирические заметки об исходных данных: docs/data-notes.md.
Статус: только слой приёма данных. Слои Raw и Parquet полностью загружаются; dbt-трансформация, MCP-сервер и Terraform ещё не построены.
Быстрый старт
uv sync
export SEC_USER_AGENT="Your Name your@email.com" # the SEC throttles anonymous traffic
uv run nport-ingest periods nport # what quarters are published upstream
uv run nport-ingest all # N-PORT + N-CEN + GLEIF, latest available
uv run nport-ingest status # what is landed, from the manifestsЗагрузка всех трёх источников занимает несколько минут и записывает ~1 ГБ в ./data.
Чтобы загрузить один источник или более ранний квартал:
uv run nport-ingest land nport --period 2026q1
uv run nport-ingest land ncen --raw-only # skip Parquet conversion
uv run nport-ingest land gleif --force # re-download and re-convertRelated MCP server: civicgraph-mcp
Хранение
NPORT_DATA_ROOT определяет, куда всё попадает, и это единственное различие между локальной итерацией и запуском в ECS:
export NPORT_DATA_ROOT=./data # default
export NPORT_DATA_ROOT=s3://my-bucket/nport # needs the `s3` extra: uv sync --extra s3Структура, согласно docs/design.md §2:
{root}/raw/{source}/{period}/{archive}.zip original bytes, immutable
{root}/parquet/{table}/period={period}/data.parquet zstd, all columns VARCHAR
{root}/parquet/_manifest/{source}/period={period}/
manifest.json source URL, raw SHA-256, per-table row counts
schema.json column names, types, descriptions and PKs, from the
CSVW sidecar the SEC ships inside each archiveПовторный запуск для уже загруженного периода ничего не делает, если не передан --force, что делает задачу безопасной для повторного запуска по расписанию. Если SEC повторно опубликует квартал под тем же именем файла, запуск предупредит, что количество байт изменилось, а не будет молча отдавать устаревшие данные.
Проектные решения в слое приёма данных
Каждый столбец Parquet имеет тип VARCHAR. Типизация должна выполняться в dbt staging/. Источники полны значений, которые ломают вывод типов — даты вроде 28-FEB-2026, числа вроде -.0091723714 и N/A, встречающееся в числовых столбцах, — поэтому вывод типов здесь либо завершился бы ошибкой, либо молча выполнил бы приведение типов, и это поместило бы бизнес-логику в тот единственный слой, который должен оставаться воспроизводимым из исходных байтов.
URL-адреса загрузки обнаруживаются, а не конструируются. Большинство архивов SEC следуют шаблону {period}_{source}.zip, но несколько кварталов N-CEN после повторной публикации были выложены как 2025q1_ncen_0.zip. Индексная страница парсится для поиска href, а стандартный шаблон используется как запасной вариант.
Извлекаются собственные метаданные схемы архивов. Оба ZIP-архива SEC содержат CSVW *_metadata.json, в котором объявлены первичные ключи для каждой таблицы, типы столбцов и описания столбцов. Это авторитетный источник для проверок гранулярности в transform/, поэтому он сохраняется как schema.json, а не остаётся внутри ZIP.
Структура
src/nport/ingest/ fetch -> validate -> land as Parquet
sources/ one module per upstream source
convert.py ZIP of delimited text -> Parquet, via DuckDB
land.py orchestration and manifests
storage.py URI addressing over fsspec (local or S3)
transform/ dbt project (dbt-duckdb) [not built]
src/nport/server/ FastMCP server [not built]
evals/ scored question set [not built]
infra/ Terraform [not built]Разработка
uv run ruff check src/ && uv run ruff format src/
uv run pytestThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA 'Server of Servers' architecture that aggregates domain-specific financial data capabilities into a single governed interface. It enables users to access fund performance tools like returns, benchmark comparisons, and risk-adjusted metrics through a unified MCP-compliant gateway.
- AlicenseAqualityBmaintenanceA money-in-politics knowledge graph, as an MCP server. It links entities across federal campaign donations, lobbying disclosures, and government contracts.7MIT
- AlicenseAqualityBmaintenanceAn MCP server that wraps SEC EDGAR APIs to provide company financial data, screening metrics, and disclosure signals for investment diligence, with every figure traced to its source filing.8MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that reconstructs hedge-fund/superinvestor portfolios from SEC EDGAR 13F filings, offering tools to query fund holdings, consensus activity, and quarter-over-quarter changes through a read-only API.3AGPL 3.0
Related MCP Connectors
MCP server for nonprofit financials via ProPublica — IRS Form 990 data for 1.8M+ nonprofits.
Knowledge coverage map and health score. Ingest docs into a governed knowledge graph via MCP.
The Graph MCP — indexed blockchain data via subgraph GraphQL queries
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bensacc/nport-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server