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 content3.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的区别
| 专题 | ZeekeeWebflow | ZeekeEitbook |
|---|---|---|
| 浏览器 | 剧作家(无头) | Axios(仅限HTTP) |
| 动态内容 | ✅ 是 | ❌ 没有 |
| 速度 | 较慢(约10s/页) | 较快(约0.5s/页) |
| 用例 | Webflow博客 | GitBook文档 |
| 网站地图支持 | 有限 | ✅ 满 |
许可证
麻省理工学院
贡献
根据MCP服务器构建模式v1.0.0为AgentLedger平台构建
______________________________________________________________________
存储库: https://github.com/oregpt/Agenticledger_MCP_ZeekeeWebflow 内置: 克劳德代码
