语义网页搜索服务

一个为AI代理设计的生产级模型上下文协议(MCP)服务器,提供网页搜索和语义页面内容检索功能,支持本地向量缓存。

  • by DimitrK
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 DimitrK/mcp-search

使用说明

MCP搜索

A. 生产就绪 用于web搜索和语义页面内容检索的模型上下文协议(MCP)服务器,具有本地矢量缓存功能。专为需要可靠、快速和上下文相关网络信息的AI代理而构建。

✨ 特性

  • 🔍 搜索提供程序适配器:谷歌自定义搜索、勇敢搜索、DuckDuckGo或Tavily,具有标准化结果
  • 🧠 语义页面阅读:使用基于嵌入的相似性搜索提取和组块内容
  • 💾 本地矢量缓存:DuckDB+VSS扩展,用于持久、快速检索
  • 🛡️ 生产安全:输入验证、内容过滤、优雅降级
  • 📊 可观测性:结构化日志记录、相关性ID、性能指标
  • 🐳 容器就绪:支持多平台构建的Docker
  • ⚡ 高性能:P50<300ms缓存,<3s首次提取
  • 🔧 CLI工具:健康检查、数据库检查、清理实用程序

🚀 快速开始

先决条件

按照本指南创建您的Google Search API凭据: 可编程搜索引擎.

通过NPM安装MCP

安装Playwright(可选-启用抓取SPA)

默认值 npx @dimitrk/mcp-search 安装程序在没有Playwright的情况下运行。要在基于npm的MCP配置中启用浏览器支持的SPA提取,请安装一次Chromium浏览器,并在其中包含Playwright npx 执行环境作为MCP包:

npx playwright@1.60.0 install --with-deps chromium
{
  "command": "npx",
  "args": [
    "-y",
    "--package",
    "@dimitrk/mcp-search",
    "--package",
    "playwright@1.60.0",
    "mcp-search"
  ]
}

安装MCP

{
  "mcpServers": {
    "web-search": {
      "command": "npx",
      "args": ["-y", "@dimitrk/mcp-search"],
      "env": {
        "SEARCH_PROVIDER": "google",
        "SEARCH_ENGINE_API_KEY": "[ENTER SEARCH ENGINE API KEY]",
        "GOOGLE_SEARCH_ENGINE_ID": "[ENTER GOOGLE SEARCH ID]",
        "EMBEDDING_SERVER_URL": "https://api.openai.com",
        "EMBEDDING_SERVER_API_KEY": "[OPEN AI KEY]",
        "EMBEDDING_MODEL_NAME": "text-embedding-3-small",
        "SIMILARITY_THRESHOLD": "0.72"
      }
    }
  }
}

通过Docker安装MCP

{
  "mcpServers": {
    "web-search": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "SEARCH_PROVIDER",
        "-e",
        "SEARCH_ENGINE_API_KEY",
        "-e",
        "GOOGLE_SEARCH_ENGINE_ID",
        "-e",
        "EMBEDDING_SERVER_URL",
        "-e",
        "EMBEDDING_SERVER_API_KEY",
        "-e",
        "EMBEDDING_MODEL_NAME",
        "-e",
        "SIMILARITY_THRESHOLD",
        "-v",
        "mcp_data:/app/data",
        "dimitrisk/mcp-search:latest"
      ],
      "env": {
        "SEARCH_PROVIDER": "google",
        "SEARCH_ENGINE_API_KEY": "[ENTER SEARCH ENGINE API KEY]",
        "GOOGLE_SEARCH_ENGINE_ID": "[ENTER GOOGLE SEARCH ENGINE ID]",
        "EMBEDDING_SERVER_URL": "https://api.openai.com",
        "EMBEDDING_SERVER_API_KEY": "[YOUR OPEN AI KEY]",
        "EMBEDDING_MODEL_NAME": "text-embedding-3-small",
        "SIMILARITY_THRESHOLD": "0.72"
      }
    }
  }
}

🔧 配置

环境变量引用

变量 必填 默认 描述
SEARCH_PROVIDER ❌ google 搜索提供程序适配器: google, brave, duckduckgo,或 tavily
SEARCH_ENGINE_API_KEY ✅* - 搜索提供商API密钥;需要时 SEARCH_PROVIDER=google, SEARCH_PROVIDER=brave,或 SEARCH_PROVIDER=tavily
GOOGLE_SEARCH_ENGINE_ID ✅* - 谷歌自定义搜索引擎ID;需要时 SEARCH_PROVIDER=google
EMBEDDING_SERVER_URL ✅ - 与OpenAI兼容的嵌入API基础URL;不包括 /v1 因为服务器附加 /v1/embeddings
EMBEDDING_SERVER_API_KEY ✅ - 用于嵌入服务的API密钥
EMBEDDING_MODEL_NAME ✅ - 嵌入的模型名称
DATA_DIR ❌ 操作系统应用程序数据目录 数据存储目录
SIMILARITY_THRESHOLD ❌ 0.6 最小相似性得分(0-1)
EMBEDDING_TOKENS_SIZE ❌ 512 令牌中的块大小
EMBEDDING_BATCH_SIZE ❌ 8 根据API请求嵌入文本(1-32)
REQUEST_TIMEOUT_MS ❌ 20000 HTTP请求超时
CONCURRENCY ❌ 2 最大并发请求数
ENABLE_SIMILARITY_SEARCH ❌ true 为搜索结果启用语义丰富
VECTOR_DB_MODE ❌ inline inline, thread 或 process
VECTOR_DB_RESTART_ON_CRASH ❌ false 在worker崩溃后重新启动vector DB worker

duckduckgo 使用DuckDuckGo的即时应答API,不需要提供程序API密钥。 提供程序提示是特定于适配器的: timeRange 发送给谷歌、Brave和Tavily; topic=news 发送给Brave;Tavily支持 topic, searchDepth (basic, advanced, fast, ultra-fast),以及 timeRange.

数据持久化和存储

嵌入如何存储

MCP搜索使用 鸭数据库 随着 VSS(矢量相似性搜索) 扩展到本地存储嵌入。数据库文件根据嵌入模型进行隔离。

数据库文件: {DATA_DIR}/db/mcp-{sanitized-model-name}.duckdb

存储的内容:

  • 文档元数据(URL、标题、上次爬网时间戳、ETag)
  • 带有部分路径和令牌计数的文本块
  • 向量嵌入(维度因模型而异)
  • 嵌入配置(型号名称、尺寸)

按部署方式列出的存储位置

NPX部署

使用时 npx @dimitrk/mcp-search,数据库存储在操作系统特定的应用程序数据目录中:

操作系统 默认位置
macOS ~/Library/Application Support/mcp-search/db/mcp-{model}.duckdb
Linux ~/.local/share/mcp-search/db/mcp-{model}.duckdb
视窗 %LOCALAPPDATA%\mcp-search\db\mcp-{model}.duckdb

自定义位置:用覆盖 DATA_DIR 环境变量:

{
  "mcpServers": {
    "web-search": {
      "env": {
        "DATA_DIR": "/path/to/custom/location"
      }
    }
  }
}

坚持: ✅ 数据在运行和系统重启过程中持续存在

Docker部署

容器路径: /app/data/db/mcp-{model}.duckdb (通过设置 ENV DATA_DIR=/app/data 在Dockerfile中)

⚠️ 重要:如果没有卷装载,数据将 集装箱停止时丢失 (由于 --rm 旗)。

推荐:使用a 命名卷 为了坚持:

{
  "args": [
    "run", "-i", "--rm",
    "-v", "mcp_data:/app/data",  // ← Named volume for persistence
    "mcp-search:latest"
  ]
}

卷管理:

# List volumes
docker volume ls

# Inspect volume location
docker volume inspect mcp_data

# Backup volume
docker run --rm -v mcp_data:/data -v $(pwd):/backup \
  alpine tar czf /backup/mcp-backup.tar.gz -C /data .

# Restore volume
docker run --rm -v mcp_data:/data -v $(pwd):/backup \
  alpine tar xzf /backup/mcp-backup.tar.gz -C /data

# Delete volume (careful!)
docker volume rm mcp_data

替代:使用a 绑定挂载 直接访问:

docker run -i --rm \
  -v ./data:/app/data \  # Bind mount to local ./data directory
  mcp-search:latest
  • ✅ 直接访问主机上的数据库文件
  • ✅ 轻松备份(只需复制 ./data 目录)
  • ⚠️ 权限:容器以UID 1001运行,确保目录可写

数据库大小和性能

典型尺寸 (因用途而异):

  • 空数据库:~100 KB
  • 缓存10页:~5-10 MB(取决于型号尺寸)
  • 缓存100页:~50-100MB
  • 缓存1000页:~500 MB-1 GB

性能特征:

  • 缓存查询:P50<300ms(从磁盘读取)
  • 首次提取:2-5s(取决于页面大小和网络)
  • 嵌入生成:取决于外部服务(OpenAI:8批约500ms)

维护和清理

# Check database health and size
mcp-search health --verbose

# Inspect what's stored
mcp-search inspect --stats

# Clean old cached data (default: >30 days)
mcp-search cleanup --days 30

# Clean and optimize database
mcp-search cleanup --days 7 --vacuum

# Preview what would be deleted (dry run)
mcp-search cleanup --dry-run

配置更改和迁移

重要:更改某些配置选项会对缓存数据产生重大影响:

✅ 安全更改(无数据丢失)

EMBEDDING_TOKENS_SIZE (块大小)

  • 从512更改→ 1024 令牌是 安全的
  • 现有块保持原始大小
  • 新内容使用新的块大小
  • 所有块共存,可以一起搜索

SIMILARITY_THRESHOLD

  • 可随时安全更换
  • 仅影响返回的结果
  • 对存储的数据没有影响

⚠️ 破坏性更改(数据丢失)

嵌入提供者或模型更改 (例如,OpenAI->Cohere)

  • 自动隔离:更改 EMBEDDING_MODEL_NAME 选择不同的特定于模型的DB文件。
  • 影响:保留先前模型的缓存数据,但新模型以空缓存开始。
  • 腐败卫士:如果特定于模型的数据库以某种方式包含不同的数据库 embedding_model 值,启动失败时会出现模型不匹配错误,而不是混合嵌入。

嵌入尺寸更改 (不同型号,不同尺寸)

  • 自动:Chunks桌子是 删除并重新创建
  • 影响:所有缓存的嵌入都是 已删除 (文件表保留)
  • 失去了什么:仅矢量嵌入(必须重新获取和重新嵌入页面)
  • 保留了什么:文档元数据(URL、标题、ETag、时间戳)
  • 日志消息: Embedding dimension changed - recreating chunks table

示例场景:

# Start with text-embedding-3-small (1536 dimensions)
EMBEDDING_MODEL_NAME=text-embedding-3-small

# Switch to text-embedding-3-large (3072 dimensions)
EMBEDDING_MODEL_NAME=text-embedding-3-large
# → Automatic: Drops chunks table, keeps documents
# → Next page fetch: Re-embeds content with new model

📊 迁移影响总结

更改 模型检查 维度检查 数据影响
块大小(512→1024) ✅ 不适用 ✅ 不适用 ✅ 无-共存
同一型号,同一尺寸 ✅ 通过 ✅ 通过 ✅ 没有
不同型号名称 ✅ 使用另一个DB文件 - ✅ 保留以前的模型缓存
同一型号,不同尺寸 ✅ 通过 ⚠️ 自动下降 ⚠️ 嵌入已删除
不同型号+尺寸 ✅ 使用另一个DB文件 - ✅ 保留以前的模型缓存

最佳实践:服务器自动为每个嵌入模型创建单独的数据库文件(例如。, mcp-text-embedding-3-small.duckdb, mcp-embed-english-v3-0.duckdb).您可以安全地在同一个模型之间切换 DATA_DIR.

数据隔离和多租户

每模型数据库隔离 (v0.1.4+):

  • 每个嵌入模型都会自动获取自己的数据库文件 DATA_DIR/db/
  • 数据库文件名包括经过净化的模型名称: mcp-{model-name}.duckdb
  • 可以安全地在模型之间切换,而不会丢失数据或发生冲突
  • 不同的模型可以在同一个模型中共存 DATA_DIR

示例数据库文件:

~/.local/share/mcp-search/db/
├── mcp-text-embedding-3-small.duckdb    # OpenAI model
├── mcp-text-embedding-3-large.duckdb    # OpenAI larger model
└── mcp-embed-english-v3-0.duckdb        # Cohere model

每 DATA_DIR 可以包含 多模型数据库:

  • 各型号之间无交叉污染
  • 维度更改仅影响该模型的数据库
  • 通过切换轻松进行A/B测试 EMBEDDING_MODEL_NAME

示例-单实例、多模型:

# Start with OpenAI model
EMBEDDING_MODEL_NAME=text-embedding-3-small npx @dimitrk/mcp-search

# Later switch to Cohere (both DBs coexist)
EMBEDDING_MODEL_NAME=embed-english-v3.0 npx @dimitrk/mcp-search

传统多实例模式 (仍然支持): 如果您更喜欢完全隔离,请使用不同的 DATA_DIR 值:

{
  "mcpServers": {
    "web-search-openai": {
      "command": "npx",
      "args": ["-y", "@dimitrk/mcp-search"],
      "env": {
        "DATA_DIR": "~/.mcp-search-openai",
        "EMBEDDING_MODEL_NAME": "text-embedding-3-small"
      }
    },
    "web-search-cohere": {
      "command": "npx",
      "args": ["-y", "@dimitrk/mcp-search"],
      "env": {
        "DATA_DIR": "~/.mcp-search-cohere",
        "EMBEDDING_MODEL_NAME": "embed-english-v3.0"
      }
    }
  }
}

将其用作图书馆

命令行界面

# Start MCP server
mcp-search server

# Health check
mcp-search health --verbose

# Database inspection
mcp-search inspect --stats
mcp-search inspect --url "https://example.com"

# Cleanup old data
mcp-search cleanup --days 30 --vacuum

MCP客户端集成

从任何兼容MCP的客户端连接到MCP服务器:

# Using MCP Inspector for debugging
npx @modelcontextprotocol/inspector mcp-search

# Programmatic usage (Node.js)
const { Client } = require('@modelcontextprotocol/sdk/client/index.js');
const client = new Client({
  name: 'mcp-search-client',
  version: '1.0.0'
});

工具使用示例

网络搜索

// Single query
const result = await client.callTool({
  name: 'web.search',
  arguments: {
    query: 'latest AI developments',
    resultsPerQuery: 5,
  },
});

// Multiple queries in parallel
const results = await client.callTool({
  name: 'web.search',
  arguments: {
    query: ['machine learning', 'neural networks', 'transformers'],
    resultsPerQuery: 3,
  },
});

语义页面阅读

// Extract and search page content
const pageResults = await client.callTool({
  name: 'web.readFromPage',
  arguments: {
    url: 'https://example.com/article',
    query: ['main findings', 'methodology', 'conclusions'],
    maxResults: 8,
    forceRefresh: false,
  },
});

// Returns semantically relevant text chunks with similarity scores
console.log(pageResults.queries[0].results[0]);
// {
//   id: 'chunk-abc123',
//   text: 'Relevant content excerpt...',
//   score: 0.87,
//   sectionPath: ['Introduction', 'Key Findings']
// }

性能调优

# High-performance setup
CONCURRENCY=8
EMBEDDING_TOKENS_SIZE=1024
SIMILARITY_THRESHOLD=0.7
REQUEST_TIMEOUT_MS=30000
VECTOR_DB_MODE=thread

# Memory-optimized setup
CONCURRENCY=1
EMBEDDING_TOKENS_SIZE=256
VECTOR_DB_MODE=inline

# Accuracy-focused setup
SIMILARITY_THRESHOLD=0.7
EMBEDDING_TOKENS_SIZE=512

🛠️ 发展

先决条件

  • Node.js 22+(CI测试节点22和24)
  • npm 9+
  • Docker(可选,用于容器化开发)
  • Git

设置

# Clone repository
git clone https://github.com/dimitrk/mcp-search.git
cd mcp-search

# Install dependencies
npm install

# Set up environment
cp .env.example .env
# Edit .env with your API keys

# Build project
npm run build

# Run health check
npm run health

环境设置

创建 .env 文件:

# Required
SEARCH_PROVIDER=google
SEARCH_ENGINE_API_KEY=your_search_engine_api_key_here
GOOGLE_SEARCH_ENGINE_ID=your_search_engine_id_here
EMBEDDING_SERVER_URL=https://api.openai.com
EMBEDDING_SERVER_API_KEY=your_openai_api_key_here
EMBEDDING_MODEL_NAME=text-embedding-3-small  # Embedding model of your choice

# Optional (with defaults)
DATA_DIR=~/.mcp-search                   # Data storage location
SIMILARITY_THRESHOLD=0.6                 # Similarity cutoff (0-1)
EMBEDDING_TOKENS_SIZE=512               # Chunk size in tokens
REQUEST_TIMEOUT_MS=20000                # HTTP timeout
CONCURRENCY=2                           # Concurrent requests

搜索提供商示例:

# Google Custom Search (default)
SEARCH_PROVIDER=google
SEARCH_ENGINE_API_KEY=your_google_api_key_here
GOOGLE_SEARCH_ENGINE_ID=your_search_engine_id_here

# Brave Search
SEARCH_PROVIDER=brave
SEARCH_ENGINE_API_KEY=your_brave_search_api_key_here

# Tavily Search
SEARCH_PROVIDER=tavily
SEARCH_ENGINE_API_KEY=your_tavily_api_key_here

# DuckDuckGo instant answers
SEARCH_PROVIDER=duckduckgo

开发脚本

# Development
npm run dev                    # Start in development mode
npm run build:watch          # Watch mode build

# Testing
npm test                      # Run all tests
npm run test:unit            # Unit tests only
npm run test:integration     # Integration tests only
npm run test:coverage        # Coverage report
npm run test:performance     # Performance benchmarks

# Quality
npm run lint                 # ESLint check
npm run lint:fix             # Auto-fix linting issues
npm run format               # Prettier formatting
npm run typecheck            # TypeScript validation

# Database
npm run db:inspect           # Inspect database contents
npm run cleanup              # Clean old data

# Production
npm start                    # Production server
npm run health:verbose       # Detailed health check

测试

# Run specific test suites
npm run test:unit -- --testNamePattern="chunker"
npm run test:integration -- --testNamePattern="readFromPage"

# Debug tests
npm run test:debug

# Performance benchmarks
npm run test:performance -- --verbose

📊 建筑

系统概述

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   MCP Client    │────│   MCP Server     │────│ Search Provider │
│   (AI Agent)    │    │                  │    │      API        │
└─────────────────┘    └──────────────────┘    └─────────────────┘
                                │
                                │
                    ┌──────────────────┐    ┌─────────────────┐
                    │  Content         │────│  Embedding      │
                    │  Extraction      │    │     API         │
                    └──────────────────┘    └─────────────────┘
                                │
                                │
                    ┌──────────────────┐    ┌─────────────────┐
                    │    DuckDB        │    │   Vector        │
                    │   Database       │────│   Search        │
                    └──────────────────┘    └─────────────────┘

数据流

  1. 搜索请求:客户端发送MCP工具调用
  2. 内容获取:HTTP客户端检索web内容
  3. 内容提取:多级提取(可读性→ 再见→ SPA)
  4. 语义分块:智能内容细分
  5. 嵌入生成:通过API的矢量表示
  6. 向量存储:DuckDB+VSS用于持久化
  7. 相似性搜索:查询的语义匹配
  8. 回应:排名,相关内容块

关键组件

  • MCP服务器:符合协议的工具服务器
  • 搜索提供程序适配器:Google、Brave、DuckDuckGo和Tavily提供商将特定于API的有效载荷标准化为共享 items 形状;谷歌地图 timeRange 到 dateRestrict,Brave地图 timeRange 到 freshness 并且可以过滤 topic=news,Tavily地图顶级 results
  • HTTP获取器:通过重试实现强大的内容检索
  • 内容提取器:多策略HTML处理
  • 语义块:令牌感知内容细分
  • 向量存储:带VSS扩展名的DuckDB
  • 嵌入服务:与OpenAI兼容的API集成

🐳 Docker部署

基本部署

# Pull image
docker pull dimitrisk/mcp-search:latest

# Run container
docker run -d \
  --name mcp-search \
  --env-file .env \
  -v mcp_data:/app/data \
  -p 3000:3000 \
  dimitrisk/mcp-search:latest

Docker Compose(推荐)

# docker-compose.yml
version: '3.8'

services:
  mcp-search:
    image: dimitrisk/mcp-search:latest
    container_name: mcp-search
    restart: unless-stopped
    env_file: .env
    volumes:
      - mcp_data:/app/data
    healthcheck:
      test: ['CMD', 'node', 'dist/cli.js', 'health']
      interval: 30s
      timeout: 10s
      retries: 3

volumes:
  mcp_data:

生产部署

# Use production compose file
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

# Monitor logs
docker-compose logs -f mcp-search

# Health check
docker-compose exec mcp-search node dist/cli.js health --verbose

🔍 故障排除

常见问题

缺少环境变量

# Check current environment
mcp-search health --verbose

# Validate specific variables
echo $SEARCH_ENGINE_API_KEY | wc -c  # Should be >30 characters for Google, Brave, or Tavily

数据库问题

# Check database status
mcp-search inspect --stats

# Reset database
mcp-search cleanup --days 0 --vacuum

# Manual database reset
rm ~/.mcp-search/db/mcp-*.duckdb

性能问题

# Check system resources
mcp-search health --verbose

# Reduce concurrency
export CONCURRENCY=1

# Increase timeouts
export REQUEST_TIMEOUT_MS=30000

网络/API问题

# Test configured search provider
# Google Custom Search
curl "https://www.googleapis.com/customsearch/v1?key=$SEARCH_ENGINE_API_KEY&cx=$GOOGLE_SEARCH_ENGINE_ID&q=test"

# Brave Search
curl -H "X-Subscription-Token: $SEARCH_ENGINE_API_KEY" \
  "https://api.search.brave.com/res/v1/web/search?q=test"

# Tavily Search
curl -X POST "https://api.tavily.com/search" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $SEARCH_ENGINE_API_KEY" \
  -d '{"query":"test","topic":"general","search_depth":"basic"}'

# DuckDuckGo instant answers
curl "https://api.duckduckgo.com/?q=test&format=json&no_html=1&skip_disambig=1"

# Test embedding API
curl -X POST "$EMBEDDING_SERVER_URL/v1/embeddings" \
  -H "Authorization: Bearer $EMBEDDING_SERVER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "'$EMBEDDING_MODEL_NAME'", "input": "test"}'

调试模式

# Enable verbose logging
DEBUG=mcp-search:* mcp-search server

# Use development configuration
NODE_ENV=development mcp-search server

# Run with MCP inspector
npx @modelcontextprotocol/inspector mcp-search

获取帮助

🔧 api参考

工具架构

web.search

interface SearchInput {
  query: string | string[]; // Search queries
  resultsPerQuery?: number; // 1-50, default 5; adapters cap to provider API limits
  minimal?: boolean; // Return compact normalized result fields, default true
  enableSimilaritySearch?: boolean; // Enrich top results with page chunks, default true
  topic?: 'general' | 'news' | 'finance'; // Provider hint; Tavily supports all values, Brave supports news filtering
  searchDepth?: 'basic' | 'advanced' | 'fast' | 'ultra-fast'; // Tavily-only provider hint
  timeRange?: 'day' | 'week' | 'month' | 'year'; // Supported by Google, Brave, and Tavily
}

interface SearchOutput {
  queries: Array<{
    query: string;
    result: unknown; // Normalized provider result with raw provider payload when available
  }>;
}

web.readFromPage

interface ReadFromPageInput {
  url: string; // Target URL
  query?: string | string[]; // Optional. Omit to return all page chunks in document order
  forceRefresh?: boolean; // Skip cache, default false
  maxResults?: number; // 1-50, default 8. Ignored when query is omitted
  includeMetadata?: boolean; // Extra metadata, default false
}

interface ReadFromPageOutput {
  url: string;
  title?: string;
  lastCrawled: string;
  queries: Array<{
    query: string;
    results: Array<{
      id: string; // Stable chunk ID
      text: string; // Content text
      score?: number; // Similarity score 0-1; omitted when query is omitted
      sectionPath?: string[]; // Document structure
    }>;
  }>;
  note?: string; // Degradation notices
}

🏗️ 贡献

开发工作流程

  1. 分叉与克隆:分叉存储库并在本地克隆
  2. 分支:创建要素分支(git checkout -b feature/amazing-feature)
  3. 开发:按照我们的标准编写代码
  4. 测试:确保所有测试通过(npm test)
  5. 提交:使用常规提交(git commit -m 'feat: add amazing feature')
  6. 推:推你的叉子(git push origin feature/amazing-feature)
  7. 公关:打开带有详细描述的Pull Request

代码标准

  • TypeScript:严格模式,显式类型
  • ESLint:ESLint推荐,TypeScript推荐,Prettier集成和本地自定义规则
  • 更漂亮:格式一致
  • 玩笑:在 jest.config.js
  • 约定式提交:用于生成变更日志

发布过程

# Version bump (patch/minor/major)
npm version patch

# Push tags
git push origin --tags

# GitHub Actions will:
# 1. Run full test suite
# 2. Security scan
# 3. Build Docker images
# 4. Publish to NPM
# 5. Create GitHub release

📋 路线图

  • [ ] v1.1:PDF和文档解析支持
  • [ ] v1.2:本地嵌入模型(节点llama cpp)
  • [ ] v1.3:高级组块策略(代码、表格)
  • [ ] v1.4:矢量数据库替代方案(Qdrant、Weaviate)
  • [ ] v1.5:Robots.txt合规切换
  • [ ] v2.0:GraphQL模式自检工具

📄 许可证

MIT许可证-请参阅 许可证 文件以获取详细信息。

🙏 致谢


内置于❤️ 对于AI代理生态系统