Qingflow MCP (CRUD)
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., "@Qingflow MCP (CRUD)Query all records in app 'my_app' with field 1003 between 2026-01-01 and 2026-01-31"
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.
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 installSet 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 devBuild and run:
npm run build
npm startRun tests:
npm testCommand Line Usage
qingflow-mcp still defaults to MCP stdio mode:
qingflow-mcpUse 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.gitInstall from npm (pinned version):
npm i -g qingflow-mcp@0.7.0Or one-click installer:
curl -fsSL https://raw.githubusercontent.com/853046310/qingflow-mcp/main/install.sh | bashSafer (review script before execution):
curl -fsSL https://raw.githubusercontent.com/853046310/qingflow-mcp/main/install.sh -o install.sh
less install.sh
bash install.shMCP 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.planExecute 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@latestVerify runtime:
node -e "console.log(process.version, typeof fetch, typeof Headers)"Publish
npm login
npm publishIf you publish under an npm scope, use:
npm publish --access publicSecurity 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
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
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/853046310/qingflow-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server