FlowyPrompt MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FlowyPrompt MCP ServerUse the code review template for PR #23"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FlowyPrompt MCP Server
Version: 2.0.0 (MCP Transformation Complete) Status: Production Ready - Full MCP Protocol Support
Model Context Protocol (MCP) server for Claude Desktop integration, providing prompt template management with automatic variable extraction, substitution, and GitHub repository synchronization.
š Web App: flowyprompt.com - Create and manage prompt templates online
šÆ Features
š¤ Claude Desktop Integration: Native MCP protocol support via stdio transport
š Automatic Variable Extraction: Detects
{variable}placeholders in templates (FlowyPrompt format)š Smart Caching: 15-minute TTL with ETag revalidation from GitHub
ā” High Performance: <100ms prompt generation, <300ms cached fetches
š Secure: GitHub PAT authentication, input validation, no exposed ports
š Observable: Built-in metrics and health check tools
ā Test-Driven: Comprehensive test coverage with TDD methodology
Related MCP server: mcp-prompt-engine
š Quick Start
Prerequisites
Node.js ā„18.0.0
npm or yarn
GitHub Personal Access Token (PAT) with repository read access
Claude Desktop app
GitHub PAT Token Permissions
When creating your GitHub Personal Access Token, ensure it has the following permissions:
Required Scopes:
repo- Full control of private repositoriesrepo:status- Access commit statusrepo_deployment- Access deployment statuspublic_repo- Access public repositoriesrepo:invite- Access repository invitationssecurity_events- Read and write security events
Alternative (Minimal) Scopes: If you only need to access public repositories, you can use:
public_repo- Access public repositories only
Token Creation Steps:
Go to GitHub ā Settings ā Developer settings ā Personal access tokens ā Tokens (classic)
Click "Generate new token (classic)"
Select the
reposcope (orpublic_repofor public repos only)Copy the generated token (starts with
ghp_)Use this token as the
GITHUB_PATvalue in your Claude Desktop configuration
Installation
# Clone repository
git clone https://github.com/your-org/flowyprompt_mcp.git
cd flowyprompt_mcp
# Install dependencies
npm install
# That's it! No .env file needed (and should NOT be created).
# All configuration MUST be done in Claude Desktop's config file.
# Creating .env will break MCP protocol (stdout pollution).Claude Desktop Configuration
No .env file needed! All configuration is done through Claude Desktop's config file.
Add the MCP server to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"flowyprompt": {
"command": "node",
"args": ["/absolute/path/to/flowyprompt_mcp/index.js"],
"env": {
"GITHUB_PAT": "ghp_your_github_personal_access_token",
"GITHUB_REPO_URL": "https://github.com/your-org/your-templates-repo",
"GITHUB_REF": "main",
"MCP_SERVER_NAME": "flowyprompt-mcp-server",
"MCP_SERVER_VERSION": "1.0.0",
"CACHE_TTL_MS": "900000",
"MAX_FILE_SIZE": "102400",
"LOG_LEVEL": "info"
}
}
}
}Configuration Notes:
ā All environment variables are set in
claude_desktop_config.jsonā No
.envfile needed in the project directoryā ļø Use absolute paths for
args(e.g.,/Users/name/flowyprompt_mcp/index.js)ā ļø
GITHUB_PATandGITHUB_REPO_URLare requiredš” Example config file: See
mcp_config.example.jsonin the repository
Claude Code Configuration (VS Code)
Use the same configuration format as Claude Desktop. If Claude Code supports file references, you can include the same file directly using:
"@mcp_config.example.json"JSON-based MCP Clients (e.g., Gemini)
Use the same configuration. If your client supports @file includes, reference the shared example config:
"@mcp_config.example.json""@file" include format
Some clients support referencing an external JSON file by using a string that begins with @. You can reuse an existing config with:
"@mcp_config.example.json"This keeps a single source of truth across clients.
Verify Installation
Restart Claude Desktop after updating the config
Check MCP connection: Look for the š icon in Claude Desktop
List prompts: Click "+" button to see available templates
Use health check: Run the
health_checktool to verify configuration
š” MCP Features
Note: HTTP Streamable MCP is not yet supported. This server currently only supports stdio transport for Claude Desktop integration.
ā Prompts (Quick Template Access)
Use the "+" button in Claude Desktop to access prompt templates with variable set support.
How to use:
Click the "+" button in Claude Desktop
Select a template from the list
Choose a pre-filled variable set by entering "X" in the
_useSet_XXXfieldOr manually enter individual variable values
Variable Sets:
Templates can include pre-defined variable sets
Each set shows a preview:
target=q, audience=w, requirements=dEnter "X" in the
_useSet_var1field to use that variable setAll variables are automatically filled
Benefits:
ā Quick access to templates via UI
ā Pre-filled variable sets for common use cases
ā Visual argument list with descriptions
šØ MCP Tools
prompts/list
List all available prompt templates from your GitHub repository.
Parameters: None (optional ref for git branch/tag)
Example:
Tool: prompts/listReturns:
{
"prompts": [
{
"name": "Brand_Positioning_Strategy",
"description": "Develop comprehensive brand positioning strategy",
"arguments": [
{"name": "company_name", "description": "Your company name", "required": true},
{"name": "industry", "description": "Your industry", "required": true}
]
}
]
}prompts/get
Get a specific prompt template with automatic variable substitution.
Parameters:
name(required): Template name (without .json extension)variables(optional): Object with variable values for substitutionref(optional): Git reference (branch/tag/commit)
Example:
Tool: prompts/get
{
"name": "Brand_Positioning_Strategy",
"variables": {
"company_name": "Acme Corp",
"industry": "Technology"
}
}Returns:
{
"description": "Develop Solution Template",
"content": "develop a template for Acme Corp targeting Technology with Strict requirements.",
"arguments": [
{"name": "_variableSet", "description": "Select a pre-filled variable set", "required": false},
{"name": "_useSet_var1", "description": "Use \"var1\" (enter X to use): target=q, audience=w, requirements=d", "required": false},
{"name": "target", "description": "Value for target", "required": false},
{"name": "audience", "description": "Value for audience", "required": false},
{"name": "requirements", "description": "Value for requirements", "required": false}
],
"isError": false
}health_check
Check MCP server health and configuration status.
Parameters: None
Example:
Tool: health_checkReturns:
{
"status": "healthy",
"server": {
"name": "flowyprompt-mcp-server",
"version": "1.0.0"
},
"config": {
"githubRepo": "https://github.com/owner/repo",
"githubRef": "main",
"cacheType": "memory",
"cacheTtlMs": 900000
},
"uptime": 3600,
"timestamp": "2025-01-06T10:30:00.000Z"
}get_metrics
Get server performance and usage metrics.
Parameters: None
Example:
Tool: get_metricsReturns:
{
"requests": {
"total": 42,
"success": 40,
"errors": 2,
"byType": {"template": 42, "flow": 0}
},
"cache": {
"hits": 30,
"misses": 12,
"hitRate": 71
},
"latency": {
"min": 45,
"max": 1850,
"avg": 180,
"p50": 120,
"p95": 850,
"p99": 1600
},
"mcp": {
"promptGeneration": {
"count": 40,
"latencyMs": {"min": 12, "max": 95, "avg": 35}
},
"tools": {
"prompts_list": {"count": 5, "errors": 0},
"prompts_get": {"count": 40, "errors": 2}
}
}
}get_variable_sets
Get pre-filled variable value sets for a template.
Parameters:
name(required): Template name (without .json extension)setName(optional): Specific variable set name to get filled templateref(optional): Git reference (branch/tag/commit)
Example 1 - List all variable sets:
Tool: get_variable_sets
{
"name": "Develop_Solution_Template"
}Returns:
{
"template": "Develop_Solution_Template",
"sets": [
{
"id": "77eae1c3-67ef-4124-8eb1-02e129709a07",
"name": "var1",
"description": "",
"variables": {
"target": "q",
"audience": "w",
"requirements": "d"
},
"variableCount": 3
}
],
"totalSets": 1
}Example 2 - Get specific variable set with filled template:
Tool: get_variable_sets
{
"name": "Develop_Solution_Template",
"setName": "var1"
}Returns:
{
"template": "Develop_Solution_Template",
"setName": "var1",
"description": "",
"variables": {
"target": "q",
"audience": "w",
"requirements": "d"
},
"filledTemplate": "develop a template for q targeting w with d."
}š Flow Execution
Execute multi-step template chains where the output of one template automatically flows into the input variables of subsequent templates.
flows/list
List all available flow templates from your GitHub repository.
Parameters:
includeMetadata(optional): Include created/updated timestamps. Default: trueref(optional): Git reference (branch/tag/commit)
Example:
Tool: flows/listReturns:
{
"flows": [
{
"name": "Marketing_Strategy",
"description": "Generate comprehensive marketing strategy with market analysis and content plan",
"version": "1.0.0",
"nodeCount": 3,
"created": "2025-01-06T10:00:00.000Z",
"updated": "2025-01-06T10:00:00.000Z"
}
],
"cached": false
}flows/execute
Execute a multi-step flow where template outputs feed into subsequent template inputs.
Parameters:
flowName(required): Flow name (without .json extension)initialVariables(required): Initial variable values for the flowref(optional): Git reference (branch/tag/commit)
Example:
Tool: flows/execute
{
"flowName": "Simple_Chain",
"initialVariables": {
"topic": "Artificial Intelligence in Healthcare"
}
}Returns:
{
"flowName": "Simple_Chain",
"executionId": "Simple_Chain_1704539400000",
"intermediateResults": [
{
"nodeId": "node-1",
"templateName": "Topic_Analysis",
"inputVariables": {
"topic": "Artificial Intelligence in Healthcare"
},
"output": "AI in healthcare analysis...",
"executionTimeMs": 450,
"timestamp": "2025-01-06T10:30:00.000Z"
},
{
"nodeId": "node-2",
"templateName": "Content_Summarizer",
"inputVariables": {
"topic": "Artificial Intelligence in Healthcare",
"node1_result": "AI in healthcare analysis..."
},
"output": "Summary of AI in healthcare...",
"executionTimeMs": 380,
"timestamp": "2025-01-06T10:30:01.000Z"
}
],
"finalResult": "Summary of AI in healthcare...",
"totalExecutionTimeMs": 830,
"status": "success"
}Variable Mapping:
Previous node outputs are automatically available as
{nodeX_result}variablesExample: node-1's output becomes
{node1_result}for subsequent nodesInitial variables remain available throughout the flow
Error Handling:
If a template execution fails, partial results are returned
The
failedAtfield indicates which node failedExample error response:
{
"code": "TEMPLATE_NOT_FOUND",
"message": "Template not found: InvalidTemplate",
"partialResults": [
{
"nodeId": "node-1",
"templateName": "Topic_Analysis",
"output": "AI in healthcare analysis...",
"executionTimeMs": 450
}
],
"failedAt": {
"nodeId": "node-2",
"templateName": "InvalidTemplate",
"error": "Template not found"
}
}Flow Definition Example:
Flows are JSON files stored under flows/ in your GitHub repository, named as flows/<Flow_Name>.json.
{
"metadata": {
"name": "Simple_Chain",
"description": "Two-step content analysis flow",
"version": "1.0.0"
},
"nodes": [
{
"id": "node-1",
"type": "template",
"data": {
"label": "Topic Analysis",
"selectedTemplateId": "Topic_Analysis",
"variables": ["topic"]
}
},
{
"id": "node-2",
"type": "template",
"data": {
"label": "Summarizer",
"selectedTemplateId": "Content_Summarizer",
"variables": ["topic", "node1_result"]
}
}
],
"edges": [
{
"id": "e1",
"source": "node-1",
"target": "node-2",
"type": "chain"
}
]
}Key Features:
ā Topological sort ensures correct execution order
ā Circular dependency detection prevents infinite loops
ā Partial results returned on failure for debugging
ā Performance target: <5s for 3-node chains
šļø Template Format
Templates are JSON files stored under templates/ in your GitHub repository, named as templates/<Template_Name>.json.
This server supports the FlowyPrompt export structure. At minimum, place a top-level object with a templates array and store your prompt in the first element using {variable} placeholders and optional variableValueSets.
Example Template: templates/Develop_Solution_Template.json
{
"metadata": {
"version": "2.0",
"exportDate": "2025-10-06T06:21:00.659Z",
"templateCount": 1,
"includeImages": false,
"imageCount": 0,
"fileName": "Develop_Solution_Template.json",
"source": "FlowyPrompt Web App"
},
"templates": [
{
"id": "1758694568593",
"title": "Develop Solution Template",
"template": "develop a template for {target} targeting {audience} with {requirements}.",
"variables": ["target", "audience", "requirements"],
"createdAt": "2025-09-24T06:16:08.593Z",
"updatedAt": "2025-10-06T06:20:26.966Z",
"version": 2,
"variableValueSets": [
{
"id": "77eae1c3-67ef-4124-8eb1-02e129709a07",
"name": "var1",
"description": "",
"values": {"target": "q", "audience": "w", "requirements": "d"},
"images": [],
"result": "",
"createdAt": "2025-10-06T06:20:26.962Z",
"updatedAt": "2025-10-06T06:20:26.962Z"
}
]
}
]
}Variable Syntax: Use {variable} placeholders
Variable Sets: Select via _variableSet or _useSet_<name> in tool inputs
Caching: Templates are cached with ETag-based revalidation
šļø Architecture
System Architecture
āāāāāāāāāāāāāāāāāāā
ā Claude Desktop ā
āāāāāāāāāā¬āāāāāāāāā
ā stdio
ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā FlowyPrompt MCP Server ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
ā ā MCP Protocol Layer ā ā
ā ā - prompts/list handler ā ā
ā ā - prompts/get handler ā ā
ā ā - health/metrics tools ā ā
ā āāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāā ā
ā ā ā
ā āāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāā ā
ā ā Service Layer ā ā
ā ā - promptService ā ā
ā ā - githubService ā ā
ā ā - cacheService ā ā
ā ā - metricsService ā ā
ā āāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāā ā
ā ā ā
ā āāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāā ā
ā ā Utilities ā ā
ā ā - logger, error handler ā ā
ā ā - config, validation ā ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
āāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāā
ā HTTPS
ā
āāāāāāāāāāāāāāā
ā GitHub API ā
ā (templates)ā
āāāāāāāāāāāāāāāDirectory Structure
flowyprompt_mcp/
āāā src/
ā āāā mcp/
ā ā āāā server.js # MCP server initialization
ā ā āāā tools/
ā ā ā āāā promptsList.js # prompts/list tool
ā ā ā āāā promptsGet.js # prompts/get tool
ā ā āāā formatters/
ā ā āāā promptFormatter.js # MCP message formatting
ā āāā services/
ā ā āāā promptService.js # Variable extraction & substitution
ā ā āāā githubService.js # GitHub API integration
ā ā āāā cacheService.js # Template caching
ā ā āāā metricsService.js # Performance metrics
ā ā āāā validationService.js # Schema validation
ā āāā utils/
ā ā āāā logger.js # Structured logging
ā ā āāā errorHandler.js # Error management
ā āāā config/
ā āāā index.js # Configuration loader
āāā tests/
ā āāā unit/ # Unit tests
ā āāā mcp/ # MCP integration tests
ā āāā contract/ # Contract tests
āāā specs/
ā āāā 002-mcp-claude-desktop/ # Design documents
āāā index.js # Entry point
āāā package.json
āāā .env.exampleTechnology Stack
Component | Technology | Purpose |
MCP SDK |
| MCP protocol implementation |
Runtime | Node.js v18+ | ES modules, native fetch API |
Transport | stdio | Claude Desktop communication |
Caching | In-memory | Template caching (15min TTL) |
Validation | AJV | JSON schema validation |
Testing | Jest | Unit and integration testing |
Logging | Winston | Structured JSON logging |
HTTP Client | Native fetch | GitHub API requests |
āļø Configuration
Environment Variables
All environment variables are configured in claude_desktop_config.json under the env section. No .env file is needed.
Variable | Required | Default | Description |
| ā | - | GitHub repository URL (e.g., |
| ā | - | Personal Access Token for GitHub API |
|
| Branch/tag/commit reference | |
|
| MCP server identifier | |
|
| MCP server version | |
|
| Cache TTL in milliseconds (15 minutes) | |
|
| Max template size in bytes (100KB) | |
|
| Logging level (debug/info/warn/error) | |
|
| GitHub API retry attempts | |
|
| Concurrent request limit |
Note: For local development/testing, you can optionally create a .env file, but it's not required for Claude Desktop usage.
Cache Configuration
The MCP server uses in-memory caching with ETag-based revalidation:
TTL: 15 minutes (configurable via
CACHE_TTL_MS)Strategy: Cache-aside with automatic revalidation
Invalidation: ETag-based, sends
If-None-MatchheaderPerformance: 304 responses return cached content instantly
š§Ŗ Testing
Run Tests
# All tests
npm test
# With coverage
npm run test:coverage
# Specific test file
npm test tests/unit/promptService.test.js
# Watch mode
npm run test:watchTest Coverage
Unit Tests: promptService (100% coverage)
Contract Tests: MCP protocol compliance
Integration Tests: stdio transport, cache revalidation
Performance Tests: Prompt generation <100ms
Target Coverage: ā„85% (per project constitution)
š Performance Targets
Metric | Target | Status |
Cold template fetch | ā¤2s | ā Achieved |
Cached template fetch | ā¤300ms | ā Achieved |
Prompt generation | <100ms | ā Achieved |
Concurrent requests | ā„20 | ā Supported |
Cache hit rate | ā„70% | ā Typical: 70-80% |
š Security
GitHub PAT Protection: PAT automatically sanitized in all logs
Input Validation: All inputs validated against JSON schemas
No Network Exposure: stdio-only, no HTTP ports opened
Path Traversal Prevention: Template names validated with regex
Error Sanitization: Sensitive details removed from error messages
š Troubleshooting
MCP Server Not Appearing in Claude Desktop
Check config file path:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Verify absolute paths: Use full paths, not relative (e.g.,
/Users/name/project/index.js)Check logs:
tail -f ~/.local/state/claude/logs/mcp*.logTest manually:
node index.js # Should start without errors
Templates Not Loading
Verify GitHub credentials:
# Test GitHub access curl -H "Authorization: token $GITHUB_PAT" \ https://api.github.com/repos/owner/repo/contents/templatesCheck template format: Ensure JSON is valid and follows schema
Use health_check tool: Verify GitHub connectivity in Claude Desktop
Performance Issues
Check cache hit rate: Use
get_metricstoolVerify network latency: Test GitHub API response times
Review logs: Check for retry attempts or errors
š Related Documentation
Implementation Plan:
specs/002-mcp-claude-desktop/plan.mdTask Breakdown:
specs/002-mcp-claude-desktop/tasks.mdData Model:
specs/002-mcp-claude-desktop/data-model.mdAPI Contracts:
specs/002-mcp-claude-desktop/contracts/Research Decisions:
specs/002-mcp-claude-desktop/research.mdQuickstart Guide:
specs/002-mcp-claude-desktop/quickstart.mdCHANGELOG:
CHANGELOG.md
š¤ Contributing
This project follows Test-Driven Development principles:
Write failing tests first (RED)
Implement minimal code to pass (GREEN)
Refactor for quality (REFACTOR)
All contributions must:
Include comprehensive tests
Maintain ā„85% code coverage
Follow ESLint and Prettier conventions
Include JSDoc comments
Update CHANGELOG.md
š Constitutional Compliance
This implementation adheres to the FlowyPrompt MCP Constitution v1.0.0:
ā I. Modularity & Isolation: Layered architecture (MCP/Service/Utility)
ā II. Schema-First Validation: AJV validation for all templates
ā III. Test-Driven Development: Tests written before implementation
ā IV. Security-First Design: PAT protection, input validation, no exposed ports
ā V. Performance & Efficiency: Caching, async I/O, <100ms prompt generation
ā VI. UX Consistency: Standardized MCP protocol, clear error messages
ā VII. Code Quality: ESLint, Prettier, JSDoc, 100% test coverage for core services
š License
MIT License - FlowyPrompt Team
š Acknowledgments
Built with MCP SDK
Designed for Claude Desktop
Follows Test-Driven Development
Built with Claude Code using Test-Driven Development and constitutional governance principles.
Version 2.0.0 - Complete MCP transformation from HTTP REST API
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/lshtrade/flowyprompt_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server