Skip to main content
Glama

nport

基于 SEC 表格 N-PORT 和表格 N-CEN 构建的规范化基金持仓与服务提供商图谱,与 GLEIF LEI 注册表关联,通过 MCP 提供给代理。

设计:docs/design.md。 关于源数据的经验笔记:docs/data-notes.md

状态:仅摄取层。 原始层和 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

落地全部三个源需要几分钟,并在 ./data 下写入约 1 GB。要落地单个源或更早的季度:

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-convert

Related 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,并以常规模式作为回退。

归档自身的模式元数据会被提取。 两个 SEC ZIP 都包含一个 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 pytest
F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    D
    maintenance
    A '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.
  • A
    license
    A
    quality
    B
    maintenance
    An 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.
    8
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP 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.
    3
    AGPL 3.0

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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