agentflow-mcp

agentflow-mcp

Provides enterprise architecture knowledge tools that ground agents in curated patterns, enabling translation of messy enterprise asks into realistic architecture recommendations, platform selection, risk checks, and brand context retrieval.

Category
访问服务器

README

agentflow-mcp

An enterprise architecture knowledge MCP server for the agentflow demo pipeline. Built with the MCP TypeScript SDK v2 + TypeScript, deployed on Fly.io.

The server exposes four tools that ground an Architecture Agent and Risk Checker Agent in curated enterprise patterns rather than generic LLM reasoning:

Tool Called by Returns
arch_pattern_lookup Architect Agent Reference architecture pattern, components, diagram data
tool_selection_lookup Architect Agent Platform recommendation with constraint-aware reasoning
risk_policy_lookup Risk Checker Agent Required controls, risk flags, HITL trigger
brand_context_lookup Architect Agent Company identity, positioning, logo (via Brandfetch + logo.dev)

How It Fits In

agentflow pipeline                          agentflow-mcp
┌──────────────────────┐                   ┌───────────────────────┐
│  Qualifier Agent     │                   │  arch_pattern_lookup   │
│  - clarifies the ask │                   │  tool_selection_lookup │
└──────┬───────────────┘                   │  risk_policy_lookup    │
       │ handoff                          │  brand_context_lookup  │
┌──────▼───────────────┐                   │                        │
│  Architect Agent     │──── MCP calls ───▶│  Source pack (data/)   │
│  - pattern selection │                   │  102 markdown files    │
│  - tool selection    │◀── JSON response ─│  with YAML frontmatter  │
│  - diagram rendering │                   │                        │
└──────┬───────────────┘                   │  Brandfetch + logo.dev │
       │ handoff                          │  (cached, additive)    │
┌──────▼───────────────┐                   └───────────────────────┘
│  Risk Checker Agent  │──── risk_policy_lookup ──▶
│  - HITL gate trigger  │◀── risk_flags, HITL ──
└──────────────────────┘

The MCP is a tool provider, not an agent orchestrator. Agent prompts and the architecture-diagram skill live in the agentflow project. The MCP provides structured data; the agents interpret and act on it.

Quickstart

Prerequisites

  • Node.js >= 20
  • (Optional) Brandfetch API key and logo.dev key for brand_context_lookup

Install & Run

npm install
npm run dev          # stdio transport (local dev + MCP Inspector)

HTTP transport (streamable HTTP)

MCP_TRANSPORT=http-stream PORT=8080 npm run dev
# agentflow-mcp listening on http://0.0.0.0:8080/mcp

The http-stream transport runs in stateless mode (hardcoded in src/index.ts). This is required for compatibility with standard MCP clients: their startup "probe" is a GET with no session ID, which a stateful server answers with 400 No sessionId (surfaced by clients as a fatal "version negotiation failed" error). Stateless mode answers that probe with 405 Method Not Allowed + Allow: POST, which every client explicitly tolerates. It also suits scale-to-zero deployments (Fly.io) — no server-side session state to lose when instances spin down.

Run Tests

npm test             # 31 unit + integration tests
npm run typecheck    # tsc --noEmit
npm run check        # biome lint + format

Environment Variables

Copy .env.example to .env and fill in the keys. Only brand_context_lookup needs external API keys — the other three tools work offline from the source pack.

Variable Required by Purpose
BRANDFETCH_API_KEY brand_context_lookup Bearer token for Brandfetch Brand Context API
LOGO_DEV_SECRET_KEY brand_context_lookup Bearer token for logo.dev Brand API
LOGO_DEV_PUBLISHABLE_KEY brand_context_lookup Publishable key for logo.dev CDN URLs
MCP_TRANSPORT Server stdio (default) or http-stream
PORT Server HTTP port (default 8080, used when transport is http-stream)
GRAYLOG_GELF_URL Server Graylog GELF HTTP input URL (e.g. http://graylog:12201/gelf); enables Graylog logging when set
GRAYLOG_SOURCE Server Source name for Graylog messages (default agentflow-mcp)

When API keys are missing, brand_context_lookup returns cached responses for cached domains or a graceful unavailable response for uncached domains. The other three tools continue to function normally.

Tools

arch_pattern_lookup

Match an enterprise ask to a curated reference architecture pattern.

Input:

{
  "industry": "media_agency",
  "data_stack": ["BigQuery", "Snowflake"],
  "cloud": "GCP",
  "constraints": ["SAML SSO", "EU data residency", "cross-client governance"],
  "latency": "batch"
}

Output:

{
  "pattern_id": "media_agency_audience_measurement",
  "architecture_summary": "...",
  "recommended_components": ["BigQuery", "Snowflake", "SAML SSO", "GCP EU Region"],
  "data_zones": ["bronze", "silver", "gold"],
  "integration_notes": ["..."],
  "confidence": 0.87,
  "diagram_data": {
    "components": [{ "name": "BigQuery", "type": "database", "sublabel": "...", "zone": "gold" }],
    "connections": [{ "from": "Users", "to": "SAML SSO", "label": "OAuth 2.0", "style": "dashed" }],
    "boundaries": [{ "label": "GCP EU Region", "type": "region" }]
  },
  "source_references": [{ "path": "data/patterns/...", "title": "...", "source_url": "..." }]
}

Matching logic: Deterministic, rules-based — industry match (40%) → data stack overlap (30%) → constraint coverage (30%). Curated matches (confidence >= 0.85) include diagram_data and source references. Weak matches fall back to a generic enterprise AI POC pattern with confidence < 0.5.

tool_selection_lookup

Recommend a platform based on workload, data stack, constraints, and latency.

Input:

{
  "use_case": "AI-powered patient insights",
  "data_stack": ["Databricks"],
  "constraints": ["HIPAA", "PHI", "US data residency"],
  "latency": "batch"
}

Output:

{
  "recommended_platform": "Databricks",
  "cloud_fit": "Azure or AWS",
  "reasoning": "Strong lakehouse fit for healthcare AI with HIPAA-compliant governance...",
  "alternatives": [{ "platform": "Snowflake", "rationale": "..." }, { "platform": "BigQuery", "rationale": "..." }]
}

risk_policy_lookup

Return industry-specific risk and governance checks, including HITL triggers for regulated data.

Input:

{
  "industry": "healthcare",
  "data_classification": ["PHI", "PII"],
  "region": "US",
  "deployment": "cloud",
  "constraints": ["HIPAA"]
}

Output:

{
  "required_controls": ["RBAC", "audit logs", "data lineage", "SAML SSO"],
  "risk_flags": ["prompt leakage", "overbroad analyst access"],
  "hitl_required": true,
  "review_reason": "PHI access requires human approval before final architecture signoff"
}

HITL is triggered for regulated data types (PHI, PII, regulated financial data) with a human-readable review_reason.

brand_context_lookup

Retrieve rich company context from Brandfetch and a logo from logo.dev, with layered caching.

Input:

{
  "domain": "havas.com"
}

Output:

{
  "company_name": "Havas",
  "domain": "havas.com",
  "industry_hint": "media_agency",
  "description": "...",
  "tags": ["advertising", "marketing", "media"],
  "positioning": { "value_proposition": "...", "target_audience": "...", "products_and_services": "..." },
  "brand": { "voice": "...", "style": "..." },
  "logo_url": "https://...",
  "confidence": 0.85
}

Caching layers: (1) Brandfetch cachedOnly=true for instant cache-only lookups, (2) local file cache with TTL. Repeated lookups return cached data without consuming API quota. Graceful fallback when APIs are unreachable.

Source Pack

The data/ directory contains 102 markdown files with structured YAML frontmatter, organized into:

data/
├── industry/      # Industry-specific architecture notes
├── vendors/        # Vendor documentation (GCP, AWS, Azure, Snowflake, Databricks)
└── patterns/       # Curated reference architecture patterns (4 demo scenarios)

Frontmatter fields: type, title, source_url, vendor, industry, data_stack, cloud, constraints, compliance, region, data_zones, latency, pattern_id, architecture_summary, recommended_components, integration_notes, confidence_baseline, diagram_data.

The source pack is loaded into an in-memory index at server startup, keyed by industry, data stack, constraints, and pattern_id.

Demo Scenarios

Scenario Industry Pattern ID
Media agency audience measurement media_agency media_agency_audience_measurement
Healthcare patient insights healthcare healthcare_patient_insights
Retail lakehouse personalization retail retail_lakehouse_personalization
FSI governance copilot financial_services fsi_governance_copilot

Deployment

Docker

docker build -t agentflow-mcp .
docker run -p 8080:8080 agentflow-mcp

Fly.io

Simplest deployment path — no IAM setup, deploys your Dockerfile directly:

# Install Fly CLI (if not already)
curl -L https://fly.io/install.sh | sh

# Create the app (one-time)
fly launch --no-deploy

# Set secrets
fly secrets set BRANDFETCH_API_KEY=your-key-here
fly secrets set LOGO_DEV_SECRET_KEY=your-key-here
fly secrets set LOGO_DEV_PUBLISHABLE_KEY=your-key-here

# Deploy
fly deploy

fly.toml is already configured: Node 22 Docker image, HTTP transport on port 8080, scale-to-zero when idle. The MCP endpoint will be at https://agentflow-mcp.fly.dev/mcp (or a custom domain such as https://arch.ishlab.dev/mcp).

Note: the server runs http-stream in stateless mode — do not switch it back to stateful, or standard MCP clients will fail their startup probe with "version negotiation failed" (see HTTP transport).

Scripts

Script Purpose
scripts/validate-source-pack.ts Validate all markdown files in data/ have valid YAML frontmatter
scripts/generate-frontmatter.mjs Generate frontmatter for source pack files
scripts/mcp-list-check.ts Verify all four tools are discoverable via MCP tool listing
scripts/brand-cache-warm.ts Pre-populate the brand cache for the four demo domains
npx tsx scripts/validate-source-pack.ts   # validate source pack
npx tsx scripts/mcp-list-check.ts          # verify tool discovery
npx tsx scripts/brand-cache-warm.ts        # warm brand cache

Testing with MCP Inspector

npx @modelcontextprotocol/inspector npm run dev

This launches the MCP Inspector UI where you can call tools interactively and verify responses.

Project Structure

agentflow-mcp/
├── src/
│   ├── index.ts                    # MCP server entry point (stdio + http-stream)
│   ├── tools/
│   │   ├── archPatternLookup.ts    # Pattern matching + confidence scoring
│   │   ├── toolSelectionLookup.ts  # Platform recommendation
│   │   ├── riskPolicyLookup.ts     # Risk/governance checks + HITL
│   │   └── brandContextLookup.ts   # Brandfetch + logo.dev with caching
│   ├── data/
│   │   ├── loader.ts                # Source pack parser + in-memory index
│   │   ├── brandfetchClient.ts     # Brandfetch Brand Context API client
│   │   ├── logoDevClient.ts         # logo.dev Brand API client
│   │   └── brandCache.ts            # Local file cache with TTL
│   └── types/
│       ├── source.ts                # Source pack entry types
│       ├── arch-pattern.ts          # arch_pattern_lookup types
│       ├── tool-selection.ts        # tool_selection_lookup types
│       ├── risk-policy.ts           # risk_policy_lookup types
│       └── brand-context.ts        # brand_context_lookup types
├── data/                            # Source pack (102 markdown files)
│   ├── industry/
│   ├── vendors/
│   └── patterns/
├── tests/                           # Unit + integration tests
├── docs/                            # PRD, MCP overview
├── scripts/                         # Validation + cache warming scripts
├── openspec/                        # OpenSpec specs (4 capabilities)
│   ├── specs/                       # Main specs (synced from archived change)
│   └── changes/archive/            # Archived change proposals
├── Dockerfile                       # Multi-stage build for Fly.io
├── fly.toml                         # Fly.io app config
└── package.json

Tech Stack

  • Runtime: Node.js >= 20
  • MCP framework: MCP TypeScript SDK v2 (@modelcontextprotocol/server 2.x)
  • Language: TypeScript (strict)
  • Validation: Zod v4
  • Linting/formatting: Biome
  • Testing: Node.js built-in test runner
  • Deployment: Docker + Fly.io

OpenSpec

This project uses OpenSpec for spec-driven development. The four tool capabilities are specified under openspec/specs/:

  • arch-pattern-lookup (7 requirements)
  • brand-context-lookup (6 requirements)
  • risk-policy-lookup (4 requirements)
  • tool-selection-lookup (5 requirements)

Validate specs with:

openspec validate --specs
openspec doctor

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选