关于 Nordic Economics Mcp
Nordic Financial MCP 是面向 AI Agent 的北欧金融数据搜索服务,覆盖公司报告、公告和宏观经济内容。它结合语义与关键词检索,并提供公司查询、PDF 文本提取和实时电价工具。
主要功能
- 01跨北欧金融数据语义搜索
- 02按公司、国家和年份筛选
- 03混合检索与交叉编码器重排
- 04查询公司注册信息
- 05提取 PDF 文本
- 06获取北欧实时电价
适用场景
- 01查找公司报告和交易所公告
- 02研究北欧宏观经济数据
- 03查询公司注册状态与地址
- 04读取未编入索引的 PDF 报告
MCP 相关
该 MCP 服务通过 StreamableHTTP 暴露金融搜索、公司信息、PDF 文本提取和电价工具。MCP 客户端可连接其远程端点。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.aidatanorge.no/mcpclaude mcp add --transport http nordic_financial_mcp https://mcp.aidatanorge.no/mcp{"mcpServers":{"nordic_financial_mcp":{"type":"http","url":"https://mcp.aidatanorge.no/mcp"}}}在 Cursor 中打开{"servers":{"nordic_financial_mcp":{"type":"http","url":"https://mcp.aidatanorge.no/mcp"}}}在 VS Code 中打开{"mcpServers":{"nordic_financial_mcp":{"type":"http","url":"https://mcp.aidatanorge.no/mcp"}}}{"mcpServers":{"nordic_financial_mcp":{"serverUrl":"https://mcp.aidatanorge.no/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
7| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 否 | 包含在响应中的任意标签,例如 'healthcheck' 或 'agent-1' |
详细介绍
Nordic Financial MCP
面向北欧金融市场的生产级语义搜索服务——专为自主 AI Agent 打造。包含 1,000,000+ 个向量,涵盖交易所公告、公司报告、大宗商品价格、运费、能源数据和新闻稿。
搜索: 使用自然语言查询年报、季报、交易所公告和宏观经济摘要,并按公司、股票代码、国家、行业或年份筛选。采用两阶段混合检索(密集检索 + 稀疏 BM25,通过 RRF 融合),并使用交叉编码器重排,以获得高精度结果。
在线端点: https://mcp.aidatanorge.no/mcp
传输方式: streamable-http
目录: Smithery · MCP Registry · Glama · mcp.so
连接
将以下内容添加到 MCP 客户端配置中:
{
"mcpServers": {
"nordic-financial": {
"type": "streamable-http",
"url": "https://mcp.aidatanorge.no/mcp"
}
}
}
或者使用 Claude Code:
claude mcp add --transport http nordic-financial https://mcp.aidatanorge.no/mcp
快速测试
在浏览器中试用在线演示:
👉 https://mcp.aidatanorge.no/demo
无需安装,无需配置。只需搜索“Equinor dividend”“Swedish policy rate”或“salmon price Q3”。
面向 MCP 客户端开发者
此服务遵循 StreamableHTTP MCP 传输方式。调用工具前必须完成完整握手。
完整握手示例(可直接复制粘贴)
# 1. Create session and capture session ID
SESSION_ID=$(curl -X GET https://mcp.aidatanorge.no/mcp \
-H "Accept: application/json, text/event-stream" \
-s -i | grep -i "mcp-session-id" | awk '{print $2}' | tr -d '\r')
echo "Session ID: $SESSION_ID"
# 2. Initialize session
curl -X POST https://mcp.aidatanorge.no/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "example-client", "version": "1.0"}
}
}'
# 3. Send initialized notification
curl -X POST https://mcp.aidatanorge.no/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{"jsonrpc": "2.0", "method": "notifications/initialized"}'
# 4. List available tools
curl -X POST https://mcp.aidatanorge.no/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {}}'
# 5. Perform a search
curl -X POST https://mcp.aidatanorge.no/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "search_filings",
"arguments": {"query": "Equinor dividend", "limit": 3}
}
}'
常见问题与解决方案
| 错误 | 原因 | 解决方案 |
|---|---|---|
406 Not Acceptable | Accept 标头缺少 text/event-stream | 发送:Accept: application/json, text/event-stream |
400 Bad Request: Missing session ID | 尚未建立会话 | 首先执行 GET /mcp,并使用返回的 mcp-session-id 标头 |
-32602 Invalid request parameters | 在 tools/list 之前未执行 initialize | 按顺序完成步骤 1-3 |
使用 MCP SDK 的 Python 示例
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client("https://mcp.aidatanorge.no/mcp") as transport:
async with ClientSession(*transport) as session:
await session.initialize()
tools = await session.list_tools()
result = await session.call_tool(
"search_filings",
{"query": "Norwegian housing market Q3 2024", "country": "NO"}
)
print(result.content[0].text)
为何这很重要
在 Claude Desktop、LangChain 和 MCP Python SDK 等符合 MCP 标准的客户端中,握手会自动完成。如果你正在构建自定义客户端,遵循上述顺序即可确保兼容性。
/demo 端点展示了浏览器如何使用 JavaScript fetch() 执行相同的握手——查看源代码即可了解可运行的实现。
这是什么
AIDataNorge 是一个全栈数据管道和语义搜索系统,可摄取、处理北欧市场的金融数据,并将其索引到针对 AI Agent 查询优化的向量数据库中。它通过模型上下文协议(MCP)服务公开数据,可原生兼容 Claude、LangChain 及其他基于 LLM 的 Agent。
该系统旨在支持自主的机器对机器数据使用,并支持新兴的 Agent 支付协议。数据库每晚更新。
MCP 工具
search_filings
对北欧公司的公告、新闻稿和宏观经济摘要进行语义搜索。
search_filings(
query="Nordea net interest margin outlook 2025",
report_type="quarterly_report", # annual_report | quarterly_report | press_release | macro_summary
country="SE", # NO | SE | DK | FI
ticker="NDA", # optional — filter by company ticker
fiscal_year=2025, # optional — filter by year
sector="energy", # optional — seafood | energy | shipping
limit=10 # default 5, max 20
)
# Returns semantically ranked text chunks with rerank_score, hybrid_score, vector_score,
# company, ticker, country, fiscal_year, report_type, filing_date and full text.
搜索管道: 密集嵌入(intfloat/e5-large-v2,1024d)+ 稀疏 BM25,通过倒数排名融合(RRF)进行融合,再由 mmarco-mMiniLMv2-L12-H384-v1 重排。支持使用任何语言进行自然语言查询。
get_company_info
在官方商业登记处查询公司信息。
get_company_info(
identifier="923609016", # org/CVR/business ID
country="NO" # NO (Brønnøysund) | DK (CVR) | FI (PRH)
)
# Returns company name, status and registered address.
parse_pdf_to_text
从 URL 下载 PDF,并逐页提取所有文本。
parse_pdf_to_text(
pdf_url="https://example.com/annual_report_2024.pdf"
)
# Returns extracted text with page separators.
# Useful for reading report attachments not indexed in the main database.
get_current_power_price
获取所有北欧竞价区的实时日前电力现货价格。
get_current_power_price(
zone="NO1", # NO1–NO5, SE1–SE4, DK1, DK2, FI
include_tomorrow=False # fetch tomorrow's prices if available (published ~13:00 CET)
)
# Returns EUR/kWh — current hour price + full hourly breakdown + daily min/max/avg.
# Norwegian zones sourced from hvakosterstrommen.no, others directly from ENTSO-E.
# Handles both PT60M (hourly) and PT15M (15-min) resolutions.
company_research
在一次调用中运行多个定向搜索,并按部分对原始结果分组。调用方定义所有部分和查询,并负责综合输出。
company_research(
company="Equinor",
sections=[
{"name": "financials", "query": "Equinor revenue EBITDA operating profit 2024", "ticker": "EQNR"},
{"name": "risk", "query": "Equinor climate regulatory risk stranded assets", "ticker": "EQNR"},
{"name": "macro", "query": "Brent crude oil price energy sector Norway 2024", "limit": 3},
{"name": "news", "query": "Equinor press release dividend acquisition 2024", "ticker": "EQNR"}
]
)
# Returns: {company, generated_at, sections} — one entry per section with ranked text chunks.
# All sections are searched in parallel. Up to 8 sections, max 10 results each.
# Use ticker on company-specific sections to avoid false positives from documents
# that merely mention the company as a customer or competitor.
如需生成完整编排的尽职调查报告,由 AI 规划各部分并综合撰写内容,请改用 Alfred MCP。
ping
ping(name="world")
# Returns: "Hello world! Nordic MCP server is running."
数据覆盖范围
| 来源 | 地理范围 | 内容 | 数量 |
|---|---|---|---|
| XBRL ESEF (filings.xbrl.org) | NO/SE/DK/FI/IS | 年报、受监管市场,2020 年至今 | 约 89k 个向量 |
| MFN Nordics | SE/NO/DK/FI | 年报和季度报告、First North 公司 | 约 116k 个向量 |
| Oslo Børs Newsweb | NO | 交易所公告,2020 年至今 | 约 52k 个向量 |
| Nasdaq Copenhagen | DK | 交易所公告,2020 年至今 | 约 8k 个向量 |
| Nasdaq Helsinki | FI | 交易所公告,2020 年至今 | 约 5k 个向量 |
| Nasdaq Stockholm | SE | 交易所公告,2020 年至今 | 正在进行 |
| Cision | SE/NO/DK/FI | 新闻稿 | 约 20k 个向量 |
| GlobeNewswire | NO/SE/DK/FI | 新闻稿,每周一至周五每小时更新 | 约 500 个向量 |
| ENTSO-E | NO/SE/DK/FI | 日前电价,覆盖所有竞价区 | 约 24k 个向量 |
| 大宗商品和运费 | 全球 | 石油、天然气、金属、航运费率(BDRY/FRO/ZIM 代理指标) | 25 个季度 |
| 挪威宏观数据 | 挪威 | GDP、CPI、利率、住房、鲑鱼、电力 | 24 个季度 |
| 北欧宏观数据 | SE/DK/FI | 利率、住房、信贷、电力 | 72 个季度 |
总计:1,000,000+ 个向量 · 每晚更新
架构
Data Sources Pipeline Serving
───────────────── ───────────────── ─────────────────
XBRL ESEF → Python ingest scripts → Qdrant
MFN Nordics → + Playwright scraping → Vector Database
Oslo Børs Newsweb → + PDF extraction → (1,000,000+ vectors)
Nasdaq Copenhagen → + Chunking → ↓
Cision / GlobeNewswire →
SSB / Norges Bank → + Chunking → ↓
SSB / Norges Bank → + Dense embeddings → MCP Server
SCB / DST / stat.fi →
→ (e5-large-v2, 1024d) → (FastMCP 3.2)
→ + Sparse BM25 → ↓
→ + RRF fusion → AI Agents / LLMs
技术栈
数据摄取
- 使用 Python 和 Playwright 处理由 JavaScript 渲染的 IR 页面及 MFN 信息流
- 使用 PyMuPDF (fitz) 提取 PDF 文本
- 按段落切分(每块 512 个令牌,重叠 100 个令牌)
- 稠密嵌入:
intfloat/e5-large-v2(1024d) - 稀疏嵌入:通过 fastembed 使用
Qdrant/bm25
存储与搜索
- Qdrant 向量数据库(可自托管)
- 使用倒数排名融合(RRF)的稠密与稀疏混合检索
- 交叉编码器重排序(
mmarco-mMiniLMv2-L12-H384-v1)
服务
- 基于 HTTP 的 FastMCP 3.2(
/mcp端点) - Cloudflare Tunnel — 每个 IP 每分钟限流 60 次请求
- 兼容 Claude、LangChain 及任何支持 MCP 的 Agent
基础设施
- Ubuntu Server 24 LTS,可自托管
- 16 GB RAM
- 使用自动化 cron 作业持续摄取数据
- 用于 Lightning Network 支付的 Bitcoin 全节点(LND)
- 配备 DigiRail 和 DigiDollar Oracle 节点的 DigiByte 全节点
Agent 支付基础设施
该系统专为自主 Agent 变现而构建,支持三种互补的支付协议:
x402 微支付
使用 x402 协议 实现了按调用付费的服务变体(mcp_server_x402.py)——这是面向自主 Agent 的 HTTP 402 支付标准。Agent 会收到支付要求响应,在 Base 上使用 USDC 付款,然后自动重试。目前已暂停——未来版本将把 x402 功能直接集成到主服务(mcp_server.py)中。
闪电网络(L402)
运行完整的 Bitcoin 节点并启用 LND,即可使用 L402——面向自主 Agent 的 HTTP 支付协议。Agent 可以发现 API、接收闪电网络发票、以毫聪付款并获得访问权限,全程无需人工干预。基础设施已就绪,变现层正在开发中。
DigiRail / DigiDollar
此外,还运行 DigiByte 完整节点及 DigiRail(一种类似 L402 的 Agent 支付协议),并运行 DigiDollar Oracle 节点。DigiDollar 是全球首个 UTXO 原生去中心化稳定币,直接在 DigiByte Core v9.26 中实现。Oracle 节点为去中心化价格馈送提供支持,以维持 DigiDollar 与美元挂钩——每隔约 25 分钟,随机选出的 30 个 Oracle 节点中必须有 15 个使用 Schnorr 签名达成共识。
这套多协议支付基础设施(x402/Base + Bitcoin/Lightning + DigiByte/DigiRail)使 AIDataNorge 能够服务于运行在不同支付生态系统中的 Agent。
数据摄取流水线设计
每个数据源都有专用的数据摄取脚本,具备:
- 通过基于 MD5 的点 ID 实现幂等处理(安全执行 upsert)
- 使用
processed.txt日志避免重复获取数据 - 使用
nohup+ cron 调度,在夜间无人值守运行 - 每个数据块都包含结构化负载:
source、country、ticker、company_name、report_type、published_date、chunk_index、total_chunks
分块策略:累积段落,直到达到 512-token 模型窗口。分块绝不会在句子中间截断。100-token 的重叠部分可确保跨块边界的上下文连贯性。
Cron 调度
| 时间 | 任务 |
|---|---|
| 周日 03:17 | XBRL 年度报告 |
| 周一至周五 06:00 | yfinance — 股价和外汇汇率 |
| 每日 06:15 | MFN Nordics — 季度报告和新闻稿 |
| 周一至周五 06:30 | ENTSO-E — 能源数据 |
| 每日 07:00 | Oslo Børs Newsweb — 交易所公告 |
| 周一至周五 08:00–18:00,每小时 | GlobeNewswire — 新闻稿(NO/SE/DK/FI) |
| 每日 09:00 | 查询分析报告(电子邮件) |
监控与活动
检查服务健康状态
# Qdrant responding?
curl http://localhost:6333
# Vector count
curl http://localhost:6333/collections/nordic_company_data | python3 -m json.tool
检查 MCP 服务进程
ps aux | grep mcp_server.py
检查 MCP 查询活动
# Tail live log
tail -f ~/logs/mcp_server.log
# Run full query analysis
cd ~/norsk-mcp-server && venv/bin/python3 analyze_queries.py
检查 Cloudflare 隧道
journalctl -u cloudflared --since "1 hour ago" | tail -50
展示的技能
- RAG 系统设计 — 从原始数据到语义搜索的端到端流水线
- 混合检索 — 使用 RRF 融合和交叉编码器重排序的密集 + 稀疏嵌入
- 大规模网页抓取 — Playwright、RSS 源、REST API、PDF 提取
- 向量数据库操作 — Qdrant、嵌入模型、重排序
- MCP 服务开发 — FastMCP、面向大模型 Agent 的工具设计
- Agent 支付协议 — x402、L402、DigiRail
- Linux 服务管理 — 进程管理、cron、systemd
- 区块链基础设施 — Bitcoin 完整节点 + LND、DigiByte 完整节点 + Oracle
- Python 工程实践 — 异步流水线、错误处理、幂等设计
- 金融数据领域知识 — 北欧交易所、监管申报、宏观数据
状态(2026 年 5 月)
nordic_company_data:1,000,000+ 个向量 — XBRL、MFN、Newsweb、Cision、GlobeNewswire、ENTSO-E、商品/货运、宏观经济- MCP 服务:已在
https://mcp.aidatanorge.no/mcp上线 - 已发布至:Smithery · MCP Registry · Glama · mcp.so
- x402 按次付费:已实现,目前暂停 — 将集成到主服务中
- L402 / DigiRail:基础设施已就绪,货币化层正在开发中
- 在线演示:
https://mcp.aidatanorge.no/demo
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。