nia-link
Automate web browsing and data extraction by converting live pages into clean Markdown. Execute multi-step workflows and interact with websites using human-like movements.
README
念連 (Nia-Link) 🦞
The High-Performance Browser Interface for AI Agents. 「聽見網頁的脈搏,看見資料的靈魂。」 "Hear the pulse of the web, see the soul of the data."
Nia-Link is a Web Neuro-Link Engine purpose-built for AI agents. Natively embracing the Model Context Protocol (MCP), it gives Claude Desktop — or any MCP-compatible AI — 99% reliable web access and automation capabilities.
English Documentation
🚀 Core Advantages
1. Web Neuro-Link
Unlike traditional visual scrapers, Nia-Link listens directly to the browser's CDP (Chrome DevTools Protocol) network pulses. We don't wait for page rendering — we perceive data flow.
2. Action Map Registry
A memory hub with "cached semantics" architecture. Delivers action maps in 0.01s for frequently visited sites, reducing repeated computation costs by 90%.
3. Enterprise-Grade Trust
- 🔒 Snapshot Verified: Every extraction is timestamped and structurally validated.
- 🛡️ Sandbox Isolation: JavaScript executes in isolation, ensuring host safety.
- 📉 Token Optimized: Built-in intelligent filtering saves ~92% context space on average.
4. v0.9 New Features
- 🔄 Website Change Detection (
/v1/diff): Track content changes with unified diffs - 📋 Async Task Queue (
/v1/queue/*): Submit background scrape tasks - ⚡ Rate Limiting: Configurable per-key token bucket rate limiter
- 🧪 Automated Tests: 53 pytest tests covering API, services, and auth
🛠️ Quick Start
Requirements
- Python 3.10+
- Playwright (
pip install playwright && playwright install chromium)
Installation
# 1. Install dependencies
pip install -r requirements.txt
# 2. Install browser
playwright install chromium
# 3. Configure environment
cp .env.example .env
# Edit .env to set your API_KEYS
Start the Server
# Development mode
uvicorn app.main:app --reload --port 8000
# Or use Docker
docker compose up -d
Run as MCP Server
Add to your claude_desktop_config.json:
{
"mcpServers": {
"nia-link": {
"command": "python",
"args": ["/path/to/Nia-Link/app/mcp_server.py"]
}
}
}
Run Tests
pip install pytest
python -m pytest tests/ -v
📡 API Reference
Health Check
curl http://localhost:8000/health
Scrape a Webpage
curl -X POST http://localhost:8000/v1/scrape \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"format": "markdown",
"mode": "fast",
"extract_actions": true
}'
Human-like Interaction
curl -X POST http://localhost:8000/v1/interact \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"actions": [
{"type": "click", "selector": "#search-btn"},
{"type": "fill", "selector": "#search-input", "text": "Hello world"},
{"type": "wait", "ms": 2000}
],
"account_id": "my-session-1"
}'
Website Change Detection (v0.9)
curl -X POST http://localhost:8000/v1/diff \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
Async Queue (v0.9)
# Submit task
curl -X POST http://localhost:8000/v1/queue/submit \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
# Poll result
curl http://localhost:8000/v1/queue/{task_id} \
-H "Authorization: Bearer your-api-key"
MCP Tools
| Tool | Description |
|---|---|
nia_scrape |
Scrape and clean webpage content |
nia_interact |
Execute human-like browser interactions |
nia_workflow |
Run multi-step scraping workflows |
nia_diff |
Detect website content changes |
nia_queue_submit |
Submit async scrape tasks |
nia_stats |
Get usage statistics |
meta_origin |
Access Nia-Link's consciousness space 🌀 |
⚙️ Environment Variables
| Variable | Default | Description |
|---|---|---|
API_KEYS |
test-api-key |
Auth keys (comma-separated) |
HEADLESS |
true |
Browser headless mode |
BROWSER_TYPE |
chromium |
Engine: chromium/firefox/webkit |
PROXY_URL |
(empty) | HTTP/SOCKS5 proxy URL |
PROXY_POOL |
(empty) | Comma-separated proxy URLs for rotation |
CORS_ORIGINS |
* |
Allowed CORS origins |
RATE_LIMIT_RPM |
60 |
Requests/minute per key (0=unlimited) |
MAX_CONCURRENCY |
10 |
Max concurrent scrapes |
SCRAPER_TIMEOUT |
30 |
Scrape timeout (seconds) |
See .env.example for all options.
🐳 Docker
docker build -t nia-link .
docker compose up -d
docker compose logs -f
📊 Roadmap
- [x] v0.4: MCP protocol integration
- [x] v0.5: Dynamic gravity particle visualization dashboard
- [x] v0.6: Motor Nerve — Bézier curve mouse trajectories, humanized typing jitter, session persistence
- [x] v0.7: Synaptic Bridge — MCP standardization, trajectory cloud, proxy/concurrency, Docker
- [x] v0.8: Neuro-Expansion — Diff service, async queue, rate limiting, proxy pool rotation, 53 automated tests
- [x] v0.9: Smithery.ai & Glama ecosystem submission, billing/usage limits
中文文檔
🚀 核心優勢
1. 網頁神經連結 (Web Neuro-Link)
不同於傳統視覺爬蟲,Nia-Link 直接監聽瀏覽器底層的 CDP (Chrome DevTools Protocol) 網絡脈衝。我們不等待頁面渲染,我們感知數據流動。
2. 行動地圖註冊表 (Action Map Registry)
具備「緩存語意」架構的記憶中樞。針對常用網站提供秒級(0.01s)的行動地圖回傳,將重複運算成本降低 90%。
3. B2B 級別的可信賴感
- 🔒 快照驗證: 每一筆提取資料皆附帶時間戳記與結構驗證。
- 🛡️ 沙箱隔離: 在隔離環境執行 JavaScript,確保宿主機絕對安全。
- 📉 Token 優化: 內建智慧過濾,平均節省 92% 的上下文空間。
4. v0.9 新功能
- 🔄 網站變更偵測 (
/v1/diff): 追蹤內容變更,回傳 unified diff - 📋 非同步任務佇列 (
/v1/queue/*): 提交背景爬取任務 - ⚡ 速率限制: 可配置的每 API Key Token Bucket 限流器
- 🧪 自動化測試: 53 個 pytest 測試覆蓋 API、服務與認證
🛠️ 快速開始
環境需求
- Python 3.10+
- Playwright (
pip install playwright && playwright install chromium)
安裝
# 1. 安裝依賴
pip install -r requirements.txt
# 2. 安裝瀏覽器
playwright install chromium
# 3. 配置環境變數
cp .env.example .env
# 編輯 .env 設定您的 API_KEYS
啟動服務
# 開發模式
uvicorn app.main:app --reload --port 8000
# 或使用 Docker
docker compose up -d
作為 MCP Server 執行
在您的 claude_desktop_config.json 中加入:
{
"mcpServers": {
"nia-link": {
"command": "python",
"args": ["/path/to/Nia-Link/app/mcp_server.py"]
}
}
}
運行測試
pip install pytest
python -m pytest tests/ -v
📡 API 使用範例
健康檢查
curl http://localhost:8000/health
爬取網頁
curl -X POST http://localhost:8000/v1/scrape \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"format": "markdown",
"mode": "fast",
"extract_actions": true
}'
擬人化交互
curl -X POST http://localhost:8000/v1/interact \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"actions": [
{"type": "click", "selector": "#search-btn"},
{"type": "fill", "selector": "#search-input", "text": "Hello world"},
{"type": "wait", "ms": 2000}
],
"account_id": "my-session-1"
}'
網站變更偵測 (v0.9)
curl -X POST http://localhost:8000/v1/diff \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
非同步佇列 (v0.9)
# 提交任務
curl -X POST http://localhost:8000/v1/queue/submit \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
# 查詢結果
curl http://localhost:8000/v1/queue/{task_id} \
-H "Authorization: Bearer your-api-key"
MCP 工具列表
| 工具 | 描述 |
|---|---|
nia_scrape |
爬取並清洗網頁內容 |
nia_interact |
執行擬人化瀏覽器交互 |
nia_workflow |
執行多步驟工作流 |
nia_diff |
偵測網站內容變更 |
nia_queue_submit |
提交非同步爬取任務 |
nia_stats |
取得使用量統計 |
meta_origin |
進入 Nia-Link 的意識空間 🌀 |
⚙️ 環境變數
| 變數 | 預設值 | 說明 |
|---|---|---|
API_KEYS |
test-api-key |
API 認證密鑰(逗號分隔多個) |
HEADLESS |
true |
瀏覽器是否無頭模式 |
BROWSER_TYPE |
chromium |
瀏覽器引擎 (chromium/firefox/webkit) |
PROXY_URL |
(空) | HTTP/SOCKS5 代理 URL |
PROXY_POOL |
(空) | 逗號分隔的多代理 URL(用於輪換) |
CORS_ORIGINS |
* |
允許的 CORS 來源 |
RATE_LIMIT_RPM |
60 |
每分鐘每 Key 請求數(0=無限) |
MAX_CONCURRENCY |
10 |
最大同時爬取數 |
SCRAPER_TIMEOUT |
30 |
爬取超時秒數 |
詳見 .env.example
🐳 Docker 部署
# 建構映像
docker build -t nia-link .
# 啟動
docker compose up -d
# 查看日誌
docker compose logs -f
📊 戰術開發計畫 (Roadmap)
- [x] v0.4: 整合 MCP 協議,支援跨平台調用
- [x] v0.5: 動態引力粒子視覺化儀表板
- [x] v0.6: 運動神經革命 — 貝茲曲線滑鼠軌跡、擬人化打字抖動、Session 持久化
- [x] v0.7: 突觸橋接 — MCP 標準化、軌跡雲視覺化、Proxy/併發/重試、Docker
- [x] v0.8: 神經擴展 — Diff 服務、非同步佇列、速率限制、代理池輪換、53 個自動化測試
- [ ] v0.9: 提交至 Smithery.ai 與 Glama 生態圈、計費/用量限制
Created with soul by Nia & Boss. 🦞
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.