CF-MCP-Server

基于 Model Context Protocol (MCP) 的服务集合,包括图像生成和内容提取等功能

Cloudflare Workers边缘计算图像生成

核心功能

标准化服务接口
基于 MCP 协议的标准化服务接口,便于集成到各种应用中
开箱即用
开箱即用的图像生成 Worker 模块,快速部署到 Cloudflare
可扩展性
支持快速扩展自定义工具和资源,满足不同场景需求
边缘计算优化
边缘计算优化部署,提供低延迟、高可用的服务体验

技术细节

模块构成
mcp-image-generation
├── Cloudflare Worker
├── Flux-1-Schnell 模型
└── 图像生成API (4-8 steps)
  • • 支持步骤数范围:4-8 steps
  • • 响应格式:Base64 编码的 PNG 图像
  • • 部署方式:Cloudflare Workers
API 文档

图像生成接口参数

参数类型约束说明
promptstring1-500字符英文描述提示词
stepsnumber4 ≤ steps ≤ 8生成迭代步数
客户端配置

方法一:使用 workers-mcp CLI(推荐)

{
  "mcpServers": {
    "generateImage": {
      "command": "/path/to/workers-mcp",
      "args": [
        "run",
        "generateImage",
        "https://mcp-image-generation.turinhub.com",
        "/path/to/mcp-image-generation"
      ],
      "env": {}
    }
  }
}

方法二:直接使用 URL(适用于 Claude 等客户端)

{
  "mcpServers": {
    "mcp-image-generation": {
      "command": "https://mcp-image-generation.turinhub.com",
      "args": [],
      "env": {},
      "disabled": false,
      "autoApprove": []
    }
  }
}

使用示例

// 客户端代码示例
import { MCPClient } from 'workers-mcp'

// 创建 MCP 客户端
const client = new MCPClient('https://mcp-image-generation.turinhub.com')

// 调用 generateImage 方法
async function generateAndSaveImage(prompt: string, steps: number = 8) {
  try {
    const imageResponse = await client.call('generateImage', prompt, steps)
    
    // 处理返回的图像
    if (imageResponse.ok) {
      const imageBlob = await imageResponse.blob()
      // 这里可以保存图像或在页面上显示
      console.log('图像生成成功!')
      return imageBlob
    } else {
      console.error('生成图像失败:', await imageResponse.text())
    }
  } catch (error) {
    console.error('调用 MCP 服务出错:', error)
  }
}

// 使用示例
generateAndSaveImage('A cute cat playing under the sunshine.', 8)
内容提取语义搜索Jina AI

Jina API 服务

基于 Jina AI 的内容提取和语义搜索服务,支持从网页提取结构化内容和进行语义搜索

内容提取(reader)

从指定 URL 提取结构化内容,包括标题、正文、关键信息等

接口参数

参数类型必填说明
urlstring需要提取内容的网页 URL
tokenstring用于认证的 Bearer token
noCacheboolean是否绕过缓存(默认 false)
语义搜索(search)

调用 Jina Search API 进行语义搜索,返回相关度排序的搜索结果

接口参数

参数类型必填说明
querystring搜索查询语句
tokenstring用于认证的 Bearer token
noContentboolean是否排除内容仅返回元数据(默认 false)
客户端配置

方法一:使用 workers-mcp CLI(推荐)

{
  "mcpServers": {
    "jinaReader": {
      "command": "/path/to/workers-mcp",
      "args": [
        "run",
        "jinaReader", 
        "http://localhost:8787",
        "/path/to/mcp-jina-api"
      ],
      "env": {}
    }
  }
}

方法二:直接使用 URL(适用于 Claude 等客户端)

{
  "mcpServers": {
    "jinaReader": {
      "command": "https://mcp-jina-api.turinhub.com",
      "args": [],
      "env": {},
      "disabled": false,
      "autoApprove": []
    }
  }
}

内容提取示例

// 客户端调用示例
import { MCPClient } from 'workers-mcp'

const client = new MCPClient('https://mcp-jina-api.turinhub.com')

async function fetchArticle(url: string) {
  try {
    const response = await client.call('reader', {
      url,
      noCache: true
    })

    if (response.ok) {
      const article = await response.json()
      console.log('提取成功:', article.title)
      return {
        content: article.content,
        highlights: article.keyPoints
      }
    }
  } catch (error) {
    console.error('内容提取失败:', error)
  }
}

// 调用示例
fetchArticle('https://example.com/news/2024-tech-trends')

语义搜索示例

// Search 使用示例
async function searchDocuments(query: string, token: string) {
  try {
    const response = await client.call('search', {
      query,
      token,
      noContent: false
    })

    if (response.ok) {
      const results = await response.json()
      console.log(`找到 ${results.results.length} 条相关结果`)
      return results.results.map((doc: any) => ({
        title: doc.metadata.title,
        score: doc.score,
        excerpt: doc.content.substring(0, 100)
      }))
    }
  } catch (error) {
    console.error('搜索失败:', error)
  }
}

// 搜索示例
searchDocuments('人工智能最新进展', 'your_jina_token_here')

高级配置

  • JINA_API_TOKEN: 用于认证的 API token
  • CACHE_TTL: 缓存时间(秒),默认 3600
  • MAX_CONTENT_LENGTH: 最大处理内容长度(字符),默认 100000
故障排除
  • 连接超时:确保 worker 服务正在运行(端口 8787 可用)
  • 认证失败:如需使用 token 认证,请到 Jina AI 申请 API key
  • 内容提取异常:检查目标网页是否包含 robots.txt 限制
  • 缓存问题:设置 noCache: true 强制刷新内容
  • 编码问题:部分网页需指定 charset,可在返回头中查看 Content-Type