About nocobase-data-analysis
A skill for agents analyzing business data through NocoBase MCP tools. It guides collection discovery, cautious querying, and grouped summaries, with checks for data sources, fields, query parameters, and suspicious aggregates.
Key features
- 01Check MCP authentication status
- 02Discover data sources and target collections
- 03Verify fields and query parameter formats
- 04Support counts, grouping, and trend analysis
- 05Cross-check suspicious aggregate results
Use cases
- 01Summarize record counts in business collections
- 02Break down data by status, owner, or department
- 03Check metric scope and reconcile grouped totals
- 04Locate business data across data sources
MCP support
Uses NocoBase MCP tools to query business data. MCP must be reachable and authenticated; the skill calls data-source, collection-metadata, and resource-query tools.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ nocobase/ skills --skill nocobase-data-analysisAfter installing, type/nocobase-data-analysisin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/analysis-patterns.mdentity-mapping.mdmetric-checklist.mdDetails
From the project READMEGoal
Use NocoBase MCP tools to locate the right collection, query business data safely, and produce reliable summaries or grouped analysis.
Prerequisite
- NocoBase MCP must already be reachable and authenticated.
- If MCP returns authentication errors such as
Auth required, stop and ask the user to refresh MCP authentication before continuing.
Default strategy
- Inspect the data source path first.
- Prefer the
maindata source. - If the target collection is not in
main, inspect other enabled data sources. - Once the collection is located, use that
dataSourceexplicitly in every subsequentresource_*call. - Prefer
resource_queryfor counts and grouped analysis only after confirming the query parameter contract. - Fall back to
resource_listplus manual counting when query results are suspicious or need cross-checking.
Useful references:
references/analysis-patterns.mdfor common business analysis shapesreferences/metric-checklist.mdfor metric definition and scope checksreferences/entity-mapping.mdfor mapping business terms to collections and fields
Data source discovery
- If the user explicitly names a data source, use it directly.
- Otherwise start with
main. - When the target collection is not found in
main, calldata_sources:list_enabledand inspect other enabled data sources one by one. - If multiple data sources contain the same collection name:
- default to
mainwhenmainis one of them; - otherwise present the candidates and explain which one you are using.
- default to
- In the final answer, state which data source was used.
Collection discovery
- If the user gives a collection name, verify it exists before querying.
- If the user uses business terms such as "leads", "users", "orders", or "opportunities", inspect collection metadata to map the business term to the actual collection name.
- Prefer
collections:listMetafor a fast overview. - Then use
collections:getwithappends: ["fields"]when you need exact field names, relation targets, or enum options. - Use
references/entity-mapping.mdas a reusable heuristic for common business nouns and likely field categories.
Query contract checks
Before using resource_query, verify the request shape matches the real backend contract:
measures[].aggregation, notaggregateorders[].order, notdirectionfieldshould usually be passed as a field path array such as["id"]or["owner", "nickname"]- Use
aliaswhenever the result will be referenced in output orhaving
Correct examples:
{
"resource": "lead",
"dataSource": "main",
"measures": [
{ "aggregation": "count", "field": ["id"], "alias": "lead_count" }
]
}
{
"resource": "lead",
"dataSource": "main",
"dimensions": [
{ "field": ["status"], "alias": "status" }
],
"measures": [
{ "aggregation": "count", "field": ["id"], "alias": "lead_count" }
],
"orders": [
{ "field": ["status"], "alias": "status", "order": "asc" }
]
}
Recommended workflow
1. Confirm reachability
- Use
auth:check. - If authentication fails, stop.
2. Find the collection
- First inspect
main. - If not found, inspect other enabled data sources.
- Read fields before querying if field names or relations are uncertain.
3. Start with simple counts
- Use
resource_querywith a singlecount(id)measure. - Keep the first query minimal so you can validate the result shape quickly.
4. Add grouped analysis
Common grouped views:
- by status
- by owner
- by source
- by department
- by created date or month
For relation labels, use field paths such as:
["owner", "nickname"]["mainDepartment", "title"]
5. Cross-check when needed
Re-check with resource_list when:
- the grouped rows look duplicated unexpectedly;
- the numeric result looks like record IDs instead of counts;
- totals do not match between summary and grouped output;
- the collection may be affected by ACL scope or hidden filters.
When cross-checking:
- fetch enough rows to cover the visible dataset or use pagination;
- count and group manually from the returned records;
- compare the manual result with
resource_query.
6. Present the result
Report:
- the collection used;
- the data source used;
- the total count;
- the key grouped breakdowns;
- any caveat such as ACL scope, null values, or fallback to manual verification.
Analysis entry points
Classify the user request before querying:
overviewfor current totals and main distributionsdistributionfor grouped counts by status, owner, source, team, or departmentfunnelfor stage-based business progressiontrendfor date or month-based change over timerankingfor top owners, sources, accounts, or productsquality-checkfor missing values, null-heavy fields, suspicious statuses, or orphaned relations
Use references/analysis-patterns.md for the recommended query shapes for each pattern.
Metric definition checks
Before returning an answer, verify the metric scope:
- what time range is included
- which time field drives the range
- whether the metric is total count, distinct count, sum, or average
- whether archived, inactive, null, or other terminal states should be included
- whether grouped totals reconcile with the grand total
Use references/metric-checklist.md when the user request is ambiguous or the metric may be interpreted in more than one way.
Common pitfalls
- Do not assume the collection is in
main; checkmainfirst, then search other enabled data sources. - Do not omit
dataSourceafter the collection has been located. - Do not use
aggregatein query measures; the backend expectsaggregation. - Do not use
directionin query orders; the backend expectsorder. - Do not assume suspicious aggregate output is correct.
- If a "count" result looks like
36,54,80, or another plausible record ID, verify whether aggregation was actually applied. - Relation label grouping requires the real relation path and target field, not guessed labels.
Verification checklist
- MCP is authenticated.
- The collection exists in the chosen data source.
- The fields used in
dimensions,measures,orders, andfilteractually exist. resource_queryusesaggregationandorder.- Summary totals match grouped totals, or any mismatch is explained.
- The final answer states the data source and any verification fallback used.