Token导航 LogoToken导航TokenDH.com
Agenticledger MCP ZeekeeWebflow logo
文档知识stdio官方级别未说明来源级核验

Agenticledger MCP ZeekeeWebflow

MCP Server

playwright

一个用于抓取Webflow博客内容并将其转换为干净Markdown的模型上下文协议(MCP)服务器,支持通过Playwright处理动态内容加载。

工具数

5

提示词数

0

GitHub Stars

0

资源数

0
TypeScriptClaude文档处理Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

oregpt

提供方

oregpt

最后核验

2026/5/17 20:19

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

npx playwright install chromium

详细介绍

Zeekee Webflow MCP服务器

版本: 1.0.0 平台: 代理分类账 状态: 生产就绪

一个模型上下文协议(MCP)服务器,用于抓取Webflow驱动的博客并将内容转换为干净的降价。专为AgentLedger平台构建,支持通过Playwright加载动态内容。

特性

  • 5强大的工具 用于全面的博客抓取
  • 剧作家整合 用于处理动态Webflow内容
  • 清除Markdown输出 通过调低转换
  • 并发控制 用于高效批量刮擦
  • 全面测试覆盖 -5/5集成测试通过
  • 符合代理分类账 -遵循平台标准v1.0.0

安装

cd "C:\Users\oreph\Documents\AgenticLedger\Custom MCP SERVERS\ZeekeeWebflowScraper"
npm install
npx playwright install chromium
npm run build

工具

1.webflow_list_post

列出Webflow博客中的所有博客文章。

参数:

{
  accessToken: string;  // Use "none" for public blogs
  url: string;          // Base blog URL (e.g., "https://www.zircuit.com/blog")
  options?: {
    maxPosts?: number;       // Default: 100
    includeMetadata?: boolean;  // Default: true
  }
}

答复:

{
  success: boolean;
  data?: {
    posts: BlogPost[];    // Array of discovered posts
    totalPosts: number;   // Total count
    baseUrl: string;      // Base URL
  };
  error?: string;
}

例子:

const result = await webflowListPosts({
  accessToken: 'none',
  url: 'https://www.zircuit.com/blog',
  options: { maxPosts: 50 }
});

console.log(`Found ${result.data.totalPosts} blog posts`);

2.webflow_scrape_post

删除一篇博客文章来清理降价。

参数:

{
  accessToken: string;  // Use "none" for public blogs
  url: string;          // Full post URL
  options?: {
    includeMetadata?: boolean;  // Default: true
    includeImages?: boolean;    // Default: true
  }
}

答复:

{
  success: boolean;
  data?: ScrapedPost;  // Post with markdown content
  error?: string;
}

例子:

const result = await webflowScrapePost({
  accessToken: 'none',
  url: 'https://www.zircuit.com/blog/zircuit-mainnet-launch'
});

console.log(result.data.markdown);  // Clean markdown content

3.webflow_scrape_multiple

通过并发控制批量删除多篇博客文章。

参数:

{
  accessToken: string;
  urls: string[];       // Array of post URLs
  options?: {
    includeMetadata?: boolean;
    includeImages?: boolean;
    concurrency?: number;  // Default: 3, Max: 5
  }
}

答复:

{
  success: boolean;
  data?: {
    posts: ScrapedPost[];
    totalPosts: number;
    totalCharacters: number;
  };
  error?: string;
}

例子:

const result = await webflowScrapeMultiple({
  accessToken: 'none',
  urls: [
    'https://www.zircuit.com/blog/post-1',
    'https://www.zircuit.com/blog/post-2',
    'https://www.zircuit.com/blog/post-3'
  ],
  options: { concurrency: 3 }
});

console.log(`Scraped ${result.data.totalPosts} posts`);

4.webflow_scrape_all

自动发现博客中的所有帖子,并将其抓取到标记中。

参数:

{
  accessToken: string;
  url: string;          // Base blog URL
  options?: {
    maxPosts?: number;
    includeMetadata?: boolean;
    includeImages?: boolean;
    concurrency?: number;
  }
}

答复:

{
  success: boolean;
  data?: {
    posts: ScrapedPost[];
    totalPosts: number;
    totalCharacters: number;
    metadata: {
      discoveredPosts: number;
      scrapedPosts: number;
      baseUrl: string;
    }
  };
  error?: string;
}

例子:

const result = await webflowScrapeAll({
  accessToken: 'none',
  url: 'https://www.zircuit.com/blog',
  options: { maxPosts: 50, concurrency: 3 }
});

console.log(`Discovered ${result.data.metadata.discoveredPosts} posts`);
console.log(`Successfully scraped ${result.data.totalPosts} posts`);

5.webflow_search

在Webflow博客文章内容中搜索查询。

参数:

{
  accessToken: string;
  url: string;          // Base blog URL
  query: string;        // Search query
  options?: {
    maxResults?: number;      // Default: 10
    includeSnippets?: boolean;  // Default: true
    caseSensitive?: boolean;    // Default: false
  }
}

答复:

{
  success: boolean;
  data?: {
    results: Array;
    totalResults: number;
    query: string;
  };
  error?: string;
}

例子:

const result = await webflowSearch({
  accessToken: 'none',
  url: 'https://www.zircuit.com/blog',
  query: 'mainnet launch',
  options: { maxResults: 5 }
});

result.data.results.forEach(r => {
  console.log(`${r.title}: ${r.matchCount} matches`);
  console.log(r.snippet);
});

测试结果

所有集成测试都通过了真实的Zircuit博客(https://www.zircuit.com/blog):

✅ List Posts from Zircuit Blog (7.2s)
   - Discovered: 10 posts
   - Sample: "From Testnet to Mainnet: Zircuit's Journey..."

✅ Scrape Single Blog Post (14.4s)
   - Content: 12,108 characters
   - Title: "From Testnet to Mainnet: Zircuit's Journey..."

✅ Scrape Multiple Posts (27.8s)
   - Requested: 3 posts
   - Scraped: 3 posts (25,934 characters)

✅ Validation - Missing accessToken (0ms)
   - Correct error handling

✅ Error Handling - Invalid URL (362ms)
   - Clear error message

📊 Total: 5/5 tests passing (100%)

运行测试

npm run test:zircuit

技术细节

技术:

  • TypeScript(严格模式,ES2022)
  • Playwright(用于动态内容的无头浏览器)
  • 拒绝(HTML到Markdown转换)
  • Zod(模式验证)
  • MCP SDK(协议集成)

平台合规性:

  • ✅ 标准响应格式: { success, data?, error? }
  • ✅ 所有工具均接受 accessToken 参数
  • ✅ Zod模式 .describe() 注释
  • ✅ 服务器中没有OAuth逻辑
  • ✅ 全面的错误处理
  • ✅ 与真实API的集成测试

支持的Webflow网站

此服务器针对具有动态内容加载的Webflow博客进行了优化。它已经过以下测试和验证:

  • ✅ Zircuit博客(https://www.zircuit.com/blog)-~47个帖子
  • 应适用于任何具有类似结构的Webflow博客

支持的常见Webflow选择器:

  • .w-dyn-item -收藏项目
  • .w-richtext -富文本内容
  • 博客帖子网址: /blog/{slug}/en/blog/{slug}

演出

  • 发现后: 10篇帖子约7秒(无限滚动)
  • 单岗位报废: 每篇帖子约14秒(包括浏览器启动)
  • 批量报废: 3个帖子约28秒(并发:2)
  • 平均值: 每篇帖子约9-10秒,并发

优化提示:

  • 使用 concurrency: 3-5 用于批量操作
  • maxPosts 限制发现时间
  • includeImages: false 如果不需要图像
  • 将发现的帖子列表重用于多个操作

错误处理

服务器提供清晰、具体的错误消息:

// Missing required parameter
{ success: false, error: "accessToken is required (use \"none\" for public blogs)" }

// No posts found
{ success: false, error: "No blog posts found at https://example.com/blog. This may not be a Webflow blog..." }

// Network error
{ success: false, error: "Failed to scrape post from URL: page.goto: net::ERR_NAME_NOT_RESOLVED" }

// No content
{ success: false, error: "No content found at URL. The page may be empty or content structure is different..." }

建筑

ZeekeeWebflowScraper/
├── src/
│   ├── index.ts       # MCP server with 5 tool handlers
│   ├── schemas.ts     # 5 Zod validation schemas
│   ├── scraper.ts     # Playwright scraping logic
│   └── tools.ts       # 5 tool implementations
├── tests/
│   └── test-zircuit-blog.js  # 5 integration tests
├── dist/              # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.md

用例

1.文献研究

// Search across all blog posts
const result = await webflowSearch({
  accessToken: 'none',
  url: 'https://www.zircuit.com/blog',
  query: 'security features'
});

2.内容归档

// Scrape entire blog to markdown
const result = await webflowScrapeAll({
  accessToken: 'none',
  url: 'https://www.zircuit.com/blog',
  options: { maxPosts: 100 }
});

// Save to files
result.data.posts.forEach(post => {
  fs.writeFileSync(`${post.slug}.md`, post.markdown);
});

3.竞争分析

// Get all posts and analyze
const result = await webflowListPosts({
  accessToken: 'none',
  url: 'https://competitor.com/blog'
});

console.log(`Total posts: ${result.data.totalPosts}`);
console.log('Recent topics:', result.data.posts.slice(0, 5).map(p => p.title));

与GitBook Scraper的区别

专题ZeekeeWebflowZeekeEitbook
浏览器剧作家(无头)Axios(仅限HTTP)
动态内容✅ 是❌ 没有
速度较慢(约10s/页)较快(约0.5s/页)
用例Webflow博客GitBook文档
网站地图支持有限✅ 满

许可证

麻省理工学院

贡献

根据MCP服务器构建模式v1.0.0为AgentLedger平台构建

______________________________________________________________________

存储库: https://github.com/oregpt/Agenticledger_MCP_ZeekeeWebflow 内置: 克劳德代码

目录标签

目录标签

TypeScriptClaude文档处理博客抓取本地部署内容转换动态内容处理WebflowMarkdown

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

oauth

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

playwright

工具数量(toolCount,工具数)

5

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiooauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP