Qingflow MCP (CRUD)
Enables CRUD operations on Qingflow forms, queries, and records through agent-native tools like qf.query.plan and qf.query.rows.
README
Qingflow MCP (CRUD)
This MCP server exposes a canonical, agent-native public surface:
qf_tool_spec_getqf_form_getqf_field_resolveqf_value_probeqf.query.planqf.query.rowsqf.query.recordqf.query.aggregateqf.query.exportqf.records.mutate
Legacy tools still exist internally for compatibility logic, but they are no longer advertised via listTools().
It intentionally excludes delete for now.
Setup
Runtime requirement:
- Node.js
>=18
- Install dependencies:
npm install
- Set environment variables:
export QINGFLOW_BASE_URL="https://api.qingflow.com"
export QINGFLOW_ACCESS_TOKEN="your_access_token"
Optional:
export QINGFLOW_FORM_CACHE_TTL_MS=300000
export QINGFLOW_REQUEST_TIMEOUT_MS=18000
export QINGFLOW_EXECUTION_BUDGET_MS=20000
export QINGFLOW_ADAPTIVE_PAGING=1
export QINGFLOW_ADAPTIVE_MIN_PAGE_SIZE=20
export QINGFLOW_ADAPTIVE_TARGET_PAGE_MS=1200
export QINGFLOW_EXPORT_MAX_ROWS=10000
export QINGFLOW_EXPORT_DIR="/tmp/qingflow-mcp-exports"
Run
Development:
npm run dev
Build and run:
npm run build
npm start
Run tests:
npm test
Command Line Usage
qingflow-mcp still defaults to MCP stdio mode:
qingflow-mcp
Use CLI mode for quick local invocation:
# list all available tools
qingflow-mcp cli tools
# machine-readable tool list
qingflow-mcp cli tools --json
# canonical plan -> execute
qingflow-mcp cli call qf.query.plan --args '{
"kind":"rows",
"query":{
"app_key":"your_app_key",
"select":[1001,1002],
"where":[{"field":1003,"op":"between","from":"2026-01-01","to":"2026-01-31"}],
"limit":20
}
}'
# then execute with returned plan_id
qingflow-mcp cli call qf.query.rows --args '{"plan_id":"plan_xxx"}'
CLI Install
Global install from GitHub:
npm i -g git+https://github.com/853046310/qingflow-mcp.git
Install from npm (pinned version):
npm i -g qingflow-mcp@0.7.0
Or one-click installer:
curl -fsSL https://raw.githubusercontent.com/853046310/qingflow-mcp/main/install.sh | bash
Safer (review script before execution):
curl -fsSL https://raw.githubusercontent.com/853046310/qingflow-mcp/main/install.sh -o install.sh
less install.sh
bash install.sh
MCP client config example:
{
"mcpServers": {
"qingflow": {
"command": "qingflow-mcp",
"env": {
"QINGFLOW_BASE_URL": "https://api.qingflow.com",
"QINGFLOW_ACCESS_TOKEN": "your_access_token"
}
}
}
}
Recommended Flow
qf_apps_listto pick app.qf_form_getto inspect field ids/titles.qf_field_resolvefor field-name toque_idmapping.qf_value_probewhen the agent needs candidate field values and explicit match evidence.qf_record_createorqf_record_update.- If create/update returns only
request_id, callqf_operation_getto resolve async result.
Full calling contract (Chinese):
Canonical Usage
Public agent flow is now:
qf_form_get/qf_field_resolvewhen field mapping is unclearqf_value_probewhen field value candidates are unclearqf.query.plan- Execute the returned
plan_idwith:qf.query.rowsqf.query.recordqf.query.aggregateqf.query.exportqf.records.mutate
Planner Example
{
"kind": "aggregate",
"query": {
"app_key": "your_app_key",
"where": [
{ "field": 1003, "op": "between", "from": "2026-01-01", "to": "2026-01-31" }
],
"group_by": [1003],
"metrics": [
{ "op": "count" },
{ "column": 1002, "op": "sum" }
],
"strict_full": true
}
}
Execute Example
{
"plan_id": "plan_xxx"
}
Rules:
- Public execute tools require
plan_id. - Optional
query/actionecho is only used for drift checking. - If execute input drifts from the planned canonical query, the server returns
PLAN_DRIFT. - Public filtering uses canonical
where[]; legacyfiltersare no longer part of the public contract.
Aggregate Business Counts
Aggregate business summaries use one canonical count contract:
{
"summary": {
"counts": {
"source_record_count": 370,
"group_assignment_count": 405,
"metric_nonnull_record_count": 395
},
"primary_metric_total": 12272931.75,
"primary_metric_missing_count": 10
}
}
Default answer for “多少单/多少条” must read summary.counts.source_record_count.
Completeness
Canonical completeness is technical-only:
is_completeraw_scan_completescan_limit_hitfetched_pagesrequested_pagesactual_scanned_pagesscanned_pagesscan_limithas_morenext_page_tokenstop_reasonoutput_truncatedomitted_itemsomitted_chars
When strict_full=true, any incomplete result fails with INCOMPLETE_RESULT.
Error Protocol
Failures return structured JSON with a machine-readable error.code, for example:
{
"ok": false,
"error": {
"code": "PLAN_REQUIRED",
"message": "...",
"fix_hint": "...",
"retryable": true
}
}
Common codes:
PLAN_REQUIREDPLAN_NOT_READYPLAN_DRIFTFORBIDDEN_RUNTIME_ALIASVALIDATION_ERRORINCOMPLETE_RESULTUPSTREAM_TIMEOUTUPSTREAM_API_ERROR
Troubleshooting
If you see runtime errors around Headers or missing web APIs:
- Upgrade Node to
>=18. - Upgrade package to latest:
npm i -g qingflow-mcp@latest
- Verify runtime:
node -e "console.log(process.version, typeof fetch, typeof Headers)"
Publish
npm login
npm publish
If you publish under an npm scope, use:
npm publish --access public
Security Notes
- Keep
QINGFLOW_ACCESS_TOKENonly in runtime env vars; do not commit.env. - Rotate token immediately if it appears in screenshots, logs, or chat history.
Community
- Contributing: CONTRIBUTING.md
- Security: SECURITY.md
- Conduct: CODE_OF_CONDUCT.md
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.