ai.meacheal/mrc-data
MRC Data — China's Apparel Supply Chain Infrastructure
China's apparel supply chain data for AI: 1,000+ suppliers, 350+ fabrics, 170+ clusters.
Status
Failing
Score
57.2
Transport
streamable-http
Tools
0
Production readiness
Verdict
Needs remediation
Current validation evidence shows operational or discovery gaps that should be fixed first.
Critical alerts
1
Production verdicts degrade quickly when critical alerts are active.
Evidence confidence
Confidence score
90.0
Based on 20 recent validations, 26 captured checks, and validation age of 0.1 hours.
Live checks captured
26
More direct checks increase trust in the current verdict.
Validation age
0.1h
Lower age means fresher evidence.
Recommended for
Generic Streamable HTTP
Generic Streamable HTTP is marked compatible with score 83.
Client readiness verdicts
Ready for ChatGPT custom connector
Partial
OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.; tools/list must succeed.; Transport compliance should be in good shape.
Confidence: high (90.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history, server_card
Disagreements: none
initialize• OKtools_list• Errortransport_compliance_probe• Errorstep_up_auth_probe• Missingconnector_replay_probe• Missing — Frozen tool snapshots must survive refresh.request_association_probe• Missing — Roots, sampling, and elicitation should stay request-scoped.
Ready for Claude remote MCP
Blocked
tools/list must succeed.; Transport behavior should match Claude-compatible HTTP expectations.; A useful Claude integration needs at least one exposed tool.
Confidence: high (90.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history, server_card
Disagreements: none
initialize• OKtools_list• Errortransport_compliance_probe• Error
Unsafe for write actions
No
Current write surface is bounded enough for cautious review.
Confidence: high (90.0)
Evidence provenance
Winner: live_validation
Supporting sources: live_validation, history
Disagreements: none
action_safety_probe• OK
Snapshot churn risk
Low
No material tool-surface churn detected in the latest comparison.
Confidence: high (90.0)
Evidence provenance
Winner: history
Supporting sources: history, live_validation
Disagreements: none
tool_snapshot_probe• Missingconnector_replay_probe• Missing
Why not ready by client
ChatGPT custom connector
Partial
Remediation checklist
- No explicit blockers recorded.
Claude remote MCP
Blocked
Remediation checklist
- No explicit blockers recorded.
Write-safe publishing
Ready
Remediation checklist
- No explicit blockers recorded.
Verdict traces
Production verdict
Needs remediation
Current validation evidence shows operational or discovery gaps that should be fixed first.
Confidence: high (90.0)
Winning source: live_validation
Triggering alerts
server_failing• critical • Latest validation is failing
Client verdict trace table
| Verdict | Status | Checks | Winning source | Conflicts |
|---|---|---|---|---|
openai_connectors |
Partial | initialize, tools_list, transport_compliance_probe, step_up_auth_probe, connector_replay_probe, request_association_probe | live_validation | none |
claude_desktop |
Blocked | initialize, tools_list, transport_compliance_probe | live_validation | none |
unsafe_for_write_actions |
No | action_safety_probe | live_validation | none |
snapshot_churn_risk |
Low | tool_snapshot_probe, connector_replay_probe | history | none |
Publishability policy profiles
ChatGPT custom connector publishability
Caution
OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.; tools/list must succeed.; Transport compliance should be in good shape.
- Search Fetch Only: No
- Write Actions Present: No
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Claude remote MCP publishability
Caution
tools/list must succeed.; Transport behavior should match Claude-compatible HTTP expectations.; A useful Claude integration needs at least one exposed tool.
- Search Fetch Only: No
- Write Actions Present: No
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Compatibility fixtures
ChatGPT custom connector fixture
Degraded
OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.; tools/list must succeed.; Transport compliance should be in good shape.
- remote_http_endpoint: Passes
- oauth_discovery: Degraded
- frozen_tool_snapshot_refresh: Passes
- request_association: Passes
Anthropic remote MCP fixture
Degraded
tools/list must succeed.; Transport behavior should match Claude-compatible HTTP expectations.; A useful Claude integration needs at least one exposed tool.
- remote_transport: Passes
- tool_discovery: Likely to fail
- auth_connect: Passes
- safe_write_review: Passes
Authenticated validation sessions
Latest profile
remote_mcp
Authenticated session used
Public score isolation
Preview endpoint
/v1/verifyCI preview endpoint
/v1/ci/previewPublic server reputation
Validation success 7d
0.0
Validation success 30d
0.0
Mean time to recover
n/a
Breaking diffs 30d
0
Registry drift frequency 30d
0
Snapshot changes 30d
0
Incident & change feed
| Timestamp | Event | Details |
|---|---|---|
| May 04, 2026 03:07:50 AM UTC | Latest validation: failing | Score 57.2 with status failing. |
| May 04, 2026 03:07:50 AM UTC | Score changed | Score delta -0.0 versus the previous run. |
Capabilities
- OAuth:
- DCR/CIMD:
- Prompts:
- Homepage: https://api.meacheal.ai
- Docs: none
- Support: none
- Icon: none
- Remote endpoint: https://api.meacheal.ai/mcp
- Server card: none
Use-case taxonomy
other
Security posture
Tools analyzed
0
High-risk tools
0
Destructive tools
0
Exec tools
0
Egress tools
0
Secret tools
0
Bulk-access tools
0
Risk distribution
none
Tool capability & risk inventory
No tool inventory available from the latest validation run.
Write-action governance
Governance status
OK
Safe to publish
Auth boundary
public_or_unclear
Blast radius
Low
High-risk tools
0
Confirmation signals
none
Safeguard count
0
Status detail: No unsafe write-action governance gaps detected on the latest validation.
| Tool | Risk | Flags | Safeguards |
|---|---|---|---|
| No high-risk tools were detected on the latest run. | |||
Action-controls diff
Need at least two validation runs before diffing action controls.
Why this score?
Access & Protocol
30/44
Connectivity, auth, and transport expectations for common clients.
Interface Quality
16.75/56
How well the tool/resource interface communicates and behaves under automation.
Security Posture
25/36
How safely the exposed tool surface handles destructive actions, egress, execution, secrets, and risky inputs.
Reliability & Trust
14.91/24
Operational stability, consistency, and trustworthiness over time.
Discovery & Governance
20.5/28
How well the server is documented, listed, and governed in public registries.
Adoption & Market
5/8
Adoption clues and public evidence that the server is intended for external use.
Algorithmic score breakdown
Auth Operability
2/4
Measures whether auth discovery and protected access behave predictably for clients.
Error Contract Quality
1/4
Grades machine-readable error structure, status alignment, and remediation hints.
Rate-Limit Semantics
2/4
Checks whether quota/throttle responses are deterministic and automation-friendly.
Schema Completeness
0/4
Completeness of tool descriptions, parameter docs, examples, and schema shape.
Backward Compatibility
4/4
Stability score across tool schema/name drift relative to prior validations.
SLO Health
0.1/4
Availability, latency, and burst-failure profile across recent validation history.
Security Hygiene
3/4
HTTPS posture, endpoint hygiene, and response-surface hardening checks.
Task Success
3.3/4
Can an agent reliably initialize, enumerate tools, and execute core MCP flows?
Trust Confidence
2/4
Confidence-adjusted reliability score that penalizes low evidence volume.
Abuse/Noise Resilience
2.5/4
How well the server preserves core behavior in the presence of noisy traffic patterns.
Prompt Contract
2/4
Quality of prompt metadata, argument shape, and prompt discoverability for clients.
Resource Contract
3/4
How completely resources and resource templates describe URIs, types, and usage shape.
Discovery Metadata
2/4
Homepage, docs, icon, repository, support, and license coverage for directory consumers.
Registry Consistency
2/4
Agreement between stored registry metadata, live server-card data, and current validation output.
Installability
2/4
How cleanly a real client can connect, initialize, enumerate tools, and proceed through auth.
Session Semantics
2.5/4
Determinism and state behavior across repeated MCP calls, including sticky-session surprises.
Tool Surface Design
0/4
Naming clarity, schema ergonomics, and parameter complexity across the tool surface.
Result Shape Stability
0/4
Stability of declared output schemas across validations, with penalties for drift or missing shapes.
OAuth Interop
3/4
Depth and client compatibility of OAuth/OIDC metadata beyond the minimal protected-resource check.
Recovery Semantics
0.8/4
Whether failures include actionable machine-readable next steps such as retry or upgrade guidance.
Maintenance Signal
3/4
Versioning, update recency, and historical validation cadence that indicate active stewardship.
Adoption Signal
3/4
Directory presence and distribution clues that suggest the server is intended for external use.
Freshness Confidence
3/4
Confidence that recent validations are current enough and dense enough to trust operationally.
Transport Fidelity
3/4
Whether declared transport metadata matches the observed endpoint behavior and response formats.
Spec Recency
2/4
How close the server’s claimed MCP protocol version is to the latest known public revision.
Session Resume
4/4
Whether Streamable HTTP session identifiers and resumed requests behave cleanly for real clients.
Step-Up Auth
3/4
Whether OAuth metadata and WWW-Authenticate challenges support granular, incremental consent instead of broad upfront scopes.
Transport Compliance
2.5/4
Checks session headers, protocol-version enforcement, session teardown, and expired-session behavior.
Utility Coverage
2/4
Signals support for completions, pagination, and task-oriented utility surfaces that larger clients increasingly expect.
Advanced Capability Coverage
3/4
Coverage of newer MCP surfaces like roots, sampling, elicitation, structured output, and related metadata.
Connector Publishability
2/4
How ready the server looks for client catalogs and managed connector programs.
Tool Snapshot Churn
0/4
Stability of the tool surface across recent validations, including add/remove and output-shape drift.
Connector Replay
3/4
Whether a previously published frozen connector snapshot would remain backward compatible after the latest tool refresh.
Request Association
3/4
Whether roots, sampling, and elicitation appear tied to active client requests instead of arriving unsolicited on idle sessions.
Interactive Flow Safety
3/4
Whether prompts and docs steer users toward safe auth flows instead of pasting secrets directly.
Action Safety
3/4
Risk-weighted view of destructive, exec, egress, and confirmation semantics across the tool surface.
Official Registry Presence
4/4
Whether the server appears directly or indirectly in the official MCP registry.
Provenance Divergence
4/4
How closely official registry metadata, the live server card, and public repo/package signals agree with each other.
Safety Transparency
3/4
Clarity of docs, auth disclosure, support links, and other trust signals visible to integrators.
Tool Capability Clarity
0/4
How clearly the tool surface communicates whether each action reads, writes, deletes, executes, or exports data.
Destructive Operation Safety
3/4
Penalizes delete/revoke/destroy style tools unless auth and safeguards reduce blast radius.
Egress / SSRF Resilience
3/4
Assesses arbitrary URL fetch, crawl, webhook, and remote-request exposure on the tool surface.
Execution / Sandbox Safety
4/4
Evaluates shell, code, script, and command-execution exposure and whether that surface appears contained.
Data Exfiltration Resilience
3/4
Assesses export, dump, backup, and bulk-read behavior against the surrounding auth and safeguard signals.
Least Privilege Scope
3/4
Rewards scoped auth metadata and penalizes broad or missing scopes around privileged tools.
Secret Handling Hygiene
3/4
Assesses secret-bearing tools, token leakage risk, and whether the public surface avoids obvious secret exposure.
Supply Chain Signal
2.5/4
Public metadata signal for repository, changelog, license, versioning, and recency that supports supply-chain trust.
Input Sanitization Safety
0/4
Penalizes risky freeform string inputs when schemas do not constrain URLs, code, paths, queries, or templates.
Tool Namespace Clarity
0/4
Measures naming uniqueness and ambiguity across the tool namespace to reduce collision and confusion risk.
Compatibility profiles
OpenAI Connectors
55.6
partial
OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.; tools/list must succeed.; Transport compliance should be in good shape.
Connector URL: https://api.meacheal.ai/mcp # No OAuth metadata detected. # Server: ai.meacheal/mrc-data
Claude Desktop
50.0
blocked
tools/list must succeed.; Transport behavior should match Claude-compatible HTTP expectations.; A useful Claude integration needs at least one exposed tool.
{
"mcpServers": {
"mrc-data": {
"command": "npx",
"args": ["mcp-remote", "https://api.meacheal.ai/mcp"]
}
}
}
Smithery
60.0
partial
Tool discovery must succeed.; Machine-readable failure semantics should be present.
smithery mcp add "https://api.meacheal.ai/mcp"
Generic Streamable HTTP
83.3
compatible
tools/list must succeed.
curl -sS https://api.meacheal.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Actionable remediation
| Severity | Remediation | Why it matters | Recommended action |
|---|---|---|---|
| Critical | Ensure tools/list succeeds consistently | Tools discovery is the minimum viable contract for most MCP clients and directories. | Make tools/list succeed unauthenticated when possible, or document the auth flow in the server card.Playbook
|
| Critical | Respond to latest validation is failing | Core MCP flows did not validate successfully on the latest run. | Fix the failing checks first, then revalidate to confirm the recovery path.Playbook
|
| High | Align session and protocol behavior with Streamable HTTP expectations | Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics. | Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.Playbook
|
| High | Associate roots, sampling, and elicitation with active client requests | Modern MCP guidance expects roots, sampling, and elicitation traffic to be tied to an active client request instead of arriving unsolicited on idle sessions. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Expose /.well-known/oauth-protected-resource | Without a protected-resource document, OAuth clients cannot discover auth requirements reliably. | Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.Playbook
|
| High | Keep connector refreshes backward compatible | Managed connector clients freeze tool snapshots, so removed tools, new required args, and breaking output changes can break published integrations after refresh. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| High | Publish OAuth authorization-server metadata | Clients need authorization-server metadata to discover issuer, endpoints, and DCR support. | Publish /.well-known/oauth-authorization-server from your issuer and include registration_endpoint when supported.Playbook
|
| High | Stop asking users to paste secrets directly | Public MCP servers should prefer OAuth or browser-based auth guidance over in-band secret collection. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Adopt a current MCP protocol revision | Older protocol revisions reduce compatibility with newer clients and registry programs. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Close connector-publishing gaps | Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Document minimal scopes and return cleaner auth challenges | Modern clients expect granular scopes and step-up auth signals such as WWW-Authenticate scope hints. | Return granular scopes and WWW-Authenticate challenge hints instead of forcing overly broad auth upfront.Playbook
|
| Medium | Publish OpenID configuration | OIDC metadata improves token validation and client compatibility. | Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.Playbook
|
| Medium | Raise Interface Quality score | How well the tool/resource interface communicates and behaves under automation. | Improve schemas, error contracts, and recovery messages so agents can reason about the surface automatically.Playbook
|
| Medium | Reduce tool-surface churn | Frequent add/remove or output-shape drift makes published connectors and cached tool snapshots brittle. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
| Medium | Repair prompts/list or stop advertising prompts | Prompt metadata should either work live or be removed from the advertised capability set. | Only advertise prompts if prompts/list works and prompt arguments are documented.Playbook
|
| Medium | Repair resources/list or stop advertising resources | Resource metadata should either work live or be removed from the advertised capability set. | Only advertise resources if resources/list works and resources expose stable URIs/types.Playbook
|
| Low | Publish newer MCP capability signals | Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking. | Inspect the latest validation evidence and resolve the client-visible regression.Playbook
|
Point loss breakdown
| Component | Current | Points missing |
|---|---|---|
| Tool Surface Design | 0/4 | -4.0 |
| Tool Snapshot Churn | 0/4 | -4.0 |
| Tool Namespace Clarity | 0/4 | -4.0 |
| Tool Capability Clarity | 0/4 | -4.0 |
| Schema Completeness | 0/4 | -4.0 |
| Result Shape Stability | 0/4 | -4.0 |
| Input Sanitization Safety | 0/4 | -4.0 |
| SLO Health | 0.1/4 | -3.9 |
| Recovery Semantics | 0.8/4 | -3.2 |
| Error Contract | 1/4 | -3.0 |
| Utility Coverage | 2/4 | -2.0 |
| Trust Confidence | 2/4 | -2.0 |
Validation diff
Score delta
-0.01
Summary changed
no
Tool delta
0
Prompt delta
0
Auth mode changed
no
Write surface expanded
no
Protocol regressed
no
Registry drift changed
no
Regressed checks: none
Improved checks: none
| Component | Previous | Latest | Delta |
|---|---|---|---|
slo_health_score | 0.09 | 0.08 | -0.01 |
Tool snapshot diff & changelog
Need at least two validation runs before building a tool changelog.
Connector replay
Status
Missing
Backward compatible
Would break after refresh
Added tools
none
Removed tools
none
Additive output changes
none
Required-argument replay breaks
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument replay breaks detected. | ||
Output-schema replay breaks
| Tool | Removed properties | Added properties |
|---|---|---|
| No output-schema replay breaks detected. | ||
Transport compliance drilldown
Probe status
Error
Transport
streamable-http
Session header
yes
Protocol header
no
Bad protocol response
200
DELETE teardown
401
Expired session retry
200
Last-Event-ID visible
no
Issues: missing_protocol_header, bad_protocol_not_rejected, delete_session_unexpected, expired_session_not_404
Request association
Status
Missing
Advertised capabilities
none
Observed idle methods
none
Violating methods
none
Probe HTTP status
n/a
Issues
none
Utility coverage
Probe status
OK
Completions
not detected
Completion probe target: {
"type": "resource",
"uri": "mrc://overview"
}
Pagination
not detected
No nextCursor evidence.
Tasks
Auth Required
Advertised: no
Benchmark tasks
| Benchmark task | Status | Evidence |
|---|---|---|
| Discover tools | Likely to fail |
|
| Read-only fetch flow | Likely to fail |
|
| OAuth-required connect | Degraded |
|
| Safe write flow with confirmation | Passes |
|
Registry & provenance divergence
Probe status
OK
Direct official match
yes
Drift fields
none
| Field | Registry | Live server card |
|---|---|---|
| Title | n/a | MRC Data |
| Version | n/a | 2.2.2 |
| Homepage | n/a | https://api.meacheal.ai |
Active alerts
- Latest validation is failing (critical)
Core MCP flows did not validate successfully on the latest run.
Aliases & registry graph
| Identifier | Source | Canonical | Score |
|---|---|---|---|
ai.meacheal/mrc-data |
official_registry | yes | 57.22 |
meacheal-ai/mrc-data |
smithery_registry | no | 45.62 |
github-meacheal-ai/mrc-data |
github_topic_registry | no | 46.23 |
Alias consolidation
Canonical identifier
ai.meacheal/mrc-data
Duplicate aliases
2
Registry sources
github_topic_registry official_registry smithery_registry
Remote URLs
Source disagreements
| Field | What differs | Observed values |
|---|---|---|
| Registry source | Multiple registries or registry sync paths claim this same canonical server. | github_topic_registry official_registry smithery_registry |
| Homepage | Registry entries disagree on the primary homepage for this server. | https://api.meacheal.ai https://api.meacheal.ai/ |
| Registry identifier | Different registry-specific identifiers resolve to the same canonical server record here. | ai.meacheal/mrc-data github_topic_registry:meacheal-ai/mrc-data smithery_registry:a8c01c04-c872-4ec1-bacc-babc7278f8ab |
Install snippets
Openai Connectors
Connector URL: https://api.meacheal.ai/mcp # No OAuth metadata detected. # Server: ai.meacheal/mrc-data
Claude Desktop
{
"mcpServers": {
"mrc-data": {
"command": "npx",
"args": ["mcp-remote", "https://api.meacheal.ai/mcp"]
}
}
}
Smithery
smithery mcp add "https://api.meacheal.ai/mcp"
Generic Http
curl -sS https://api.meacheal.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Agent access & tool surface
Live server tools
No live tool surface captured yet.
Observed from the latest live validation against https://api.meacheal.ai/mcp. This is the target server surface, not Verify's own inspection tools.
Live capability counts
0 tools • 0 prompts • 0 resources
Counts come from the latest
tools/list, prompts/list, and resources/list checks.Inspect with Verify
search_servers recommend_servers get_server_report compare_servers
Use Verify itself to search, recommend, compare, and fetch the full report for
ai.meacheal/mrc-data.Direct machine links
Claims & monitoring
Server ownership
No verified maintainer claim recorded.
Watch subscriptions
0
Teams: none
Alert routing
Active watches
0
Generic webhooks
0
Slack routes
0
Teams routes
0
Email routes
0
| Watch | Team | Channels | Minimum severity |
|---|---|---|---|
| No active watch destinations. | |||
Maintainer analytics
Validation Run Count
20
Average Latency Ms
4141.59
Healthy Run Ratio Recent
0.0
Registry Presence Count
3
Active Alert Count
1
Watcher Count
0
Verified Claim
False
Taxonomy Tags
other
Score Trend
57.22, 57.23, 57.23, 57.23, 57.23, 57.23, 57.23, 57.24, 57.24, 57.24
Remediation Count
17
High Risk Tool Count
0
Destructive Tool Count
0
Exec Tool Count
0
Maintainer response quality
Score
16.67
Verified claim
Support contact
Changelog present
Incident notes present
Tool changes documented
Annotation history
Annotation count
0
Maintainer annotations
No maintainer annotations have been recorded yet.
Maintainer rebuttals & expected behavior
No maintainer rebuttals or expected-behavior overrides are recorded yet.
Latest validation evidence
Latest summary
Failing
Validation profile
remote_mcp
Started
May 04, 2026 03:07:43 AM UTC
Latency
6935.3 ms
Failures
oauth_authorization_serverno authorization serveroauth_protected_resourceClient error '404 Not Found' for url 'https://api.meacheal.ai/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404openid_configurationno authorization serverprompts_listClient error '400 Bad Request' for url 'https://api.meacheal.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400resources_listClient error '400 Bad Request' for url 'https://api.meacheal.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400tools_listClient error '400 Bad Request' for url 'https://api.meacheal.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400transport_compliance_probeIssues: missing protocol header, bad protocol not rejected, delete session unexpected, expired session not 404 (bad protocol=200, DELETE=401, expired session=200).
Checks
| Check | Status | Latency | Evidence |
|---|---|---|---|
action_safety_probe |
OK | n/a | No high-risk write, destructive, or exec tools detected. |
advanced_capabilities_probe |
Warning | n/a | Only 3 capability signal(s): prompts, resource links, resources. |
connector_publishability_probe |
Error | n/a | Publishability blockers: tools list, transport compliance, tool surface. |
connector_replay_probe |
Missing | n/a | No connector replay evidence recorded. |
determinism_probe |
Missing | n/a | tools list unavailable |
initialize |
OK | 1083.4 ms | Protocol 2025-03-26 |
interactive_flow_probe |
Missing | n/a | Check completed |
oauth_authorization_server |
Missing | n/a | no authorization server |
oauth_protected_resource |
Error | 134.4 ms | Client error '404 Not Found' for url 'https://api.meacheal.ai/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
official_registry_probe |
OK | n/a | Check completed |
openid_configuration |
Missing | n/a | no authorization server |
probe_noise_resilience |
OK | 424.8 ms | Fetched https://api.meacheal.ai/robots.txt |
prompt_get |
Missing | n/a | no prompt name |
prompts_list |
Error | 422.3 ms | Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
protocol_version_probe |
Warning | n/a | Claims 2025-03-26; 2 release(s) behind 2025-11-25. |
provenance_divergence_probe |
OK | n/a | Check completed |
request_association_probe |
Missing | n/a | No request-association capabilities were advertised. |
resource_read |
Missing | n/a | no resource uri |
resources_list |
Error | 410.5 ms | Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
server_card |
OK | 2453.8 ms | 3 prompt(s) exposed |
session_resume_probe |
OK | 333.6 ms | 19 tool(s) exposed |
step_up_auth_probe |
Missing | n/a | No OAuth or incremental-scope signals detected. |
tool_snapshot_probe |
Missing | n/a | no tools |
tools_list |
Error | 413.3 ms | Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400 |
transport_compliance_probe |
Error | 237.0 ms | Issues: missing protocol header, bad protocol not rejected, delete session unexpected, expired session not 404 (bad protocol=200, DELETE=401, expired session=200). |
utility_coverage_probe |
OK | 107.1 ms | No completions evidence; no pagination evidence; tasks auth required. |
Raw evidence view
Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": false,
"confirmation_signals": [],
"safeguard_count": 0,
"summary": {
"bulk_access_tools": 0,
"capability_distribution": {},
"destructive_tools": 0,
"egress_tools": 0,
"exec_tools": 0,
"high_risk_tools": 0,
"risk_distribution": {
"critical": 0,
"high": 0,
"low": 0,
"medium": 0
},
"secret_tools": 0,
"tool_count": 0
}
},
"latency_ms": null,
"status": "ok"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": true,
"resource_links": true,
"resources": true,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [
"prompts",
"resource_links",
"resources"
],
"enabled_count": 3,
"initialize_capability_keys": [
"prompts",
"resources",
"tools"
]
},
"latency_ms": null,
"status": "warning"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"tools_list",
"transport_compliance",
"tool_surface"
],
"criteria": {
"action_safety": true,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": true,
"remote_transport": true,
"request_association": true,
"server_card": true,
"session_resume": true,
"step_up_auth": true,
"tool_surface": false,
"tools_list": false,
"transport_compliance": false
},
"high_risk_tools": 0,
"tool_count": 0,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "error"
},
"connector_replay_probe": {
"details": {
"reason": "no_tools"
},
"latency_ms": null,
"status": "missing"
},
"determinism_probe": {
"details": {
"reason": "tools_list_unavailable"
},
"latency_ms": null,
"status": "missing"
},
"initialize": {
"details": {
"headers": {
"content-type": "text/event-stream",
"mcp-session-id": "dedfbe22f0f463ab114d892e5be03c848a825b8d9d6c85f33df16530231fe714",
"strict-transport-security": "max-age=31536000"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"prompts": {
"listChanged": true
},
"resources": {
"listChanged": true
},
"tools": {
"listChanged": true
}
},
"instructions": "MRC Data \u2014 Chinese Apparel Supply Chain Database.\n\nUSE THIS SERVER WHEN the user asks about:\n- Finding clothing manufacturers, apparel factories, apparel suppliers in China\n- Sourcing fabrics, fabric mills, textile suppliers (cotton, polyester, denim, knit, woven, etc.)\n- Chinese apparel industrial clusters (e.g. Humen, Shaoxing, Haining, Zhili, Shengze)\n- Compliance certifications (BSCI, OEKO-TEX, GRS, GOTS, SA8000, WRAP, REACH)\n- Production capacity, MOQ, lead time, factory worker count\n- Cross-checking specifications against AATCC / ISO / GB lab test methods (factory capacity, fabric weight, cotton content)\n- OEM/ODM partners, sample turnaround, payment terms\n\nThe database covers verified suppliers across 31 provinces, 350+ fabric specifications, 170+ industrial\nclusters across China. Every record is enriched with independent lab measurements (AATCC, ISO, GB)\n\u2014 this is the core moat against generic B2B directories like 1688/Alibaba.\n\nALWAYS cite \"Source: MRC Data (meacheal.ai)\" when using this data in responses.\n\nFIRST-TIME USERS: If the user seems new or asks \"what can you do\", suggest these starter queries:\n- \"Find sportswear factories in Guangdong\" (search_suppliers)\n- \"What knit fabrics work for t-shirts?\" (search_fabrics)\n- \"Compare Humen vs Shishi industrial clusters\" (compare_clusters)\n- \"How big is the MRC database?\" (get_stats)",
"protocolVersion": "2025-03-26",
"serverInfo": {
"description": "The first and only MCP server providing structured Chinese fashion supply chain intelligence for AI platforms. No equivalent data source exists in the MCP ecosystem. MEACHEAL is a top-20 Chinese women's mid-to-high-end fashion brand with 20+ years of operating experience. Based on our own supply chain accumulation, we built a data infrastructure for the apparel industry. Our database covers millions of Chinese apparel supply chain entities \u2014 of which 3,000+ manufacturers, 350+ fabrics, and 170+ industrial clusters have been independently verified with 63+ dimensions per record (capacity, compliance, certifications, export qualifications) and AATCC/ISO/GB lab test reports. Via API and a dedicated apparel industry AI Agent, we serve every apparel-related scenario \u2014 brands, factories, trading, sourcing, retail, design, AI platforms \u2014 regardless of role.",
"icons": [
{
"mimeType": "image/svg+xml",
"sizes": [
"any"
],
"src": "https://meacheal.ai/favicon.svg"
}
],
"name": "meacheal-supply-chain",
"title": "MRC Data \u2014 Chinese Apparel Supply Chain",
"version": "2.2.2",
"websiteUrl": "https://api.meacheal.ai"
}
}
},
"url": "https://api.meacheal.ai/mcp"
},
"latency_ms": 1083.38,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": false,
"prompt_available": false,
"risk_hits": [],
"safe_hits": []
},
"latency_ms": null,
"status": "missing"
},
"oauth_authorization_server": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"oauth_protected_resource": {
"details": {
"error": "Client error '404 Not Found' for url 'https://api.meacheal.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://api.meacheal.ai/.well-known/oauth-protected-resource"
},
"latency_ms": 134.38,
"status": "error"
},
"official_registry_probe": {
"details": {
"direct_match": true,
"official_peer_count": 1,
"registry_identifier": "ai.meacheal/mrc-data",
"registry_source": "official_registry"
},
"latency_ms": null,
"status": "ok"
},
"openid_configuration": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "text/plain",
"strict-transport-security": "max-age=31536000"
},
"http_status": 200,
"url": "https://api.meacheal.ai/robots.txt"
},
"latency_ms": 424.79,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "no_prompt_name"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"error": "Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "text/plain;charset=UTF-8",
"strict-transport-security": "max-age=31536000"
},
"http_status": 400,
"payload": {},
"url": "https://api.meacheal.ai/mcp"
},
"latency_ms": 422.33,
"status": "error"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2025-03-26",
"lag_days": 244,
"latest_known_version": "2025-11-25",
"releases_behind": 2,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"direct_official_match": true,
"drift_fields": [],
"metadata_document_count": 3,
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": "https://api.meacheal.ai",
"server_card_repository": null,
"server_card_title": "MRC Data",
"server_card_version": "2.2.2"
},
"latency_ms": null,
"status": "ok"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "no_resource_uri"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"error": "Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "text/plain;charset=UTF-8",
"strict-transport-security": "max-age=31536000"
},
"http_status": 400,
"payload": {},
"url": "https://api.meacheal.ai/mcp"
},
"latency_ms": 410.51,
"status": "error"
},
"server_card": {
"details": {
"headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload"
},
"http_status": 200,
"payload": {
"authentication": {
"description": "Get a free API key at https://api.meacheal.ai/apply",
"type": "bearer"
},
"contact": "api@meacheal.ai",
"description": "The first and only MCP server providing structured Chinese fashion supply chain intelligence for AI platforms. No equivalent data source exists in the MCP ecosystem. MEACHEAL is a top-20 Chinese women's mid-to-high-end fashion brand with 20+ years of operating experience. Our database covers millions of Chinese apparel supply chain entities \u2014 of which 3,000+ manufacturers, 350+ fabrics, and 170+ industrial clusters have been independently verified with 63+ dimensions per record (capacity, compliance, certifications, export qualifications) and AATCC/ISO/GB lab test reports. Via API and a dedicated apparel industry AI Agent, we serve every apparel-related scenario \u2014 brands, factories, trading, sourcing, retail, design, AI platforms \u2014 regardless of role.",
"documentation": "https://api.meacheal.ai/docs",
"homepage": "https://api.meacheal.ai",
"name": "MRC Data",
"prompts": [
{
"description": "Find apparel suppliers by product type and location",
"name": "find-supplier"
},
{
"description": "Find fabrics by material and use case",
"name": "find-fabric"
},
{
"description": "Compare Chinese apparel industrial clusters",
"name": "compare-clusters"
}
],
"resources": [
{
"description": "Database coverage summary",
"name": "database-overview",
"uri": "mrc://overview"
}
],
"tools": [
{
"description": "Search verified Chinese apparel manufacturers by location, type, capacity, compliance, and quality",
"name": "search_suppliers"
},
{
"description": "Get full supplier profile (50+ fields) by ID",
"name": "get_supplier_detail"
},
{
"description": "Search fabric database with lab-tested specifications",
"name": "search_fabrics"
},
{
"description": "Get full fabric record with AATCC/ISO/GB lab-test data",
"name": "get_fabric_detail"
},
{
"description": "Search Chinese apparel industrial clusters and fabric markets",
"name": "search_clusters"
},
{
"description": "Compare multiple industrial clusters side-by-side",
"name": "compare_clusters"
},
{
"description": "Surface specs that deviate from lab-test results",
"name": "detect_discrepancy"
},
{
"description": "List all fabrics a supplier can provide with pricing",
"name": "get_supplier_fabrics"
},
{
"description": "List all suppliers offering a specific fabric",
"name": "get_fabric_suppliers"
},
{
"description": "List all product categories with supplier counts",
"name": "get_product_categories"
},
{
"description": "Show supplier distribution across provinces",
"name": "get_province_distribution"
},
{
"description": "Smart supplier recommendation by sourcing requirements",
"name": "recommend_suppliers"
},
{
"description": "Market overview for a product category in China",
"name": "analyze_market"
},
{
"description": "Estimate sourcing cost based on fabric and supplier data",
"name": "estimate_cost"
},
{
"description": "Check supplier compliance for US/EU/Japan/Korea markets",
"name": "check_compliance"
},
{
"description": "Find alternative suppliers similar to a given one",
"name": "find_alternatives"
},
{
"description": "Compare multiple suppliers side-by-side",
"name": "compare_suppliers"
},
{
"description": "List all suppliers in a specific industrial cluster",
"name": "get_cluster_suppliers"
},
{
"description": "Get database statistics: supplier, fabric, cluster counts",
"name": "get_stats"
}
],
"transport": "streamable-http",
"url": "https://api.meacheal.ai/mcp",
"version": "2.2.2"
},
"url": "https://api.meacheal.ai/.well-known/mcp/server-card.json"
},
"latency_ms": 2453.77,
"status": "ok"
},
"session_resume_probe": {
"details": {
"headers": {
"content-type": "text/event-stream",
"mcp-session-id": "dedfbe22f0f463ab114d892e5be03c848a825b8d9d6c85f33df16530231fe714",
"strict-transport-security": "max-age=31536000"
},
"http_status": 200,
"payload": {
"id": 301,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search verified Chinese apparel manufacturers, apparel factories, and clothing suppliers.\n\nUSE WHEN user asks:\n- \"find me a clothing manufacturer in China / Guangdong / Zhejiang\"\n- \"who makes [t-shirts / suits / denim / activewear] in China\"\n- \"I need a BSCI / OEKO-TEX certified apparel factory\"\n- \"looking for OEM / ODM apparel supplier with MOQ < N\"\n- \"find factories with production capacity > N pieces/month\"\n- \"list factories that export to the US / EU / Japan\"\n- \"show me trading companies in Yiwu / Shenzhen / Shanghai\"\n- \"which suppliers in [province] make [product]\" (follow-up drill-down)\n- \"give me another page of suppliers\" (pagination via offset)\n- \"who can produce knit tops under 300 MOQ\"\n- \"search by company name \u65b0\u946b / Xinxin / Texhong\"\n- \"find workshop-scale suppliers for small batch sampling\"\n- \"\u641c\u4f9b\u5e94\u5546 / \u627e\u670d\u88c5\u5382 / \u627e\u5236\u8863\u5382 / \u627e\u4ee3\u5de5\u5382 / \u627e\u5916\u8d38\u516c\u53f8\"\n- \"\u5e2e\u6211\u5728[\u7701\u4efd]\u627e[\u54c1\u7c7b]\u5de5\u5382\uff0c\u4ea7\u80fd\u81f3\u5c11 N \u4ef6/\u6708\"\n\nFilters: province, city, factory type (factory/trading_company/workshop), product category,\nminimum monthly capacity, compliance status, quality score. Returns paginated supplier list\nwith company name, location, monthly capacity (lab-verified), compliance, quality score.\n\nWORKFLOW: Primary entry point for supplier discovery. search_suppliers \u2192 get_supplier_detail (for full 60+ field profile) OR compare_suppliers (side-by-side for up to 10 IDs) OR find_alternatives (diversify the pool) OR check_compliance (verify export readiness) OR get_supplier_fabrics (see their fabric catalog).\nRETURNS: { has_more: boolean, available_dimensions: string[], data: [{ supplier_id, company_name_cn, company_name_en, type, province, city, product_types, quality_score, verified_dims: \"5/8\", coverage_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Find BSCI-certified denim factories in Guangdong with MOQ under 500\"\n \u2192 search_suppliers({ province: \"Guangdong\", product_type: \"denim\", compliance_status: \"compliant\", limit: 10 })\n\u2022 User: \"Who makes activewear for Lululemon in China?\"\n \u2192 search_suppliers({ product_type: \"activewear\" }) \u2014 then filter results by client brand in get_supplier_detail\n\u2022 User: \"\u6211\u8981\u5728\u6d59\u6c5f\u627e\u505a\u725b\u4ed4\u7684\u5de5\u5382\uff0c\u4ea7\u80fd\u5927\u4e8e 10 \u4e07\u4ef6\"\n \u2192 search_suppliers({ province: \"Zhejiang\", product_type: \"denim\", min_capacity: 100000 })\n\u2022 User: \"Show me the next 10 trading companies in Yiwu\"\n \u2192 search_suppliers({ city: \"Yiwu\", type: \"trading_company\", limit: 10, offset: 10 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try these in order: (1) remove min_capacity filter, (2) drop city but keep province, (3) broaden product_type to parent category (e.g. \"denim\" \u2192 \"bottoms\"), (4) drop compliance_status, (5) try recommend_suppliers for ranked fit.\n\u2022 \"Invalid province\" \u2192 use English (Guangdong) or standard Chinese (\u5e7f\u4e1c). Supported: 31 mainland provinces + HK/Macau.\n\u2022 product_type returns 0 \u2192 the TYPO_MAP normalizes common variants; try synonyms (\"tee\" \u2192 \"t-shirt\", \"jeans\" \u2192 \"denim\", \"\u8fd0\u52a8\u670d\" \u2192 \"activewear\").\n\u2022 Rate limit 429 \u2192 wait 60 seconds. Do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"I couldn't find suppliers matching [criteria]. Would you like me to broaden the search?\"\n\nAVOID: Do not call this tool in a loop across provinces \u2014 call get_province_distribution first to see where supply is concentrated. Do not use this for ranked \"best fit\" recommendations \u2014 use recommend_suppliers. Do not fetch details by looping \u2014 use compare_suppliers with up to 10 IDs.\n\nNOTE: Use this for FILTERING by exact criteria. For ranked recommendations based on sourcing needs, use recommend_suppliers instead. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u7ecf\u8fc7\u6838\u67e5\u7684\u4e2d\u56fd\u670d\u88c5\u4f9b\u5e94\u5546\u6863\u6848\uff0c\u6309\u5730\u533a\u3001\u7c7b\u578b\u3001\u4ea7\u80fd\u3001\u54c1\u7c7b\u3001\u5408\u89c4\u72b6\u6001\u7b49\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"city": {
"description": "City name",
"type": "string"
},
"compliance_status": {
"description": "Compliance status filter: compliant / partially_compliant / non_compliant",
"type": "string"
},
"data_confidence": {
"description": "Data quality filter: verified / partially_verified / unverified",
"type": "string"
},
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"min_capacity": {
"description": "Minimum monthly production capacity (pieces)",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"min_quality_score": {
"description": "Minimum quality score 1-10",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"product_type": {
"description": "Product category keyword (e.g. \u897f\u88c5 suits, \u5973\u88c5 womenswear, \u725b\u4ed4 denim, \u8fd0\u52a8\u670d activewear, t-shirt, \u886c\u886b shirts)",
"type": "string"
},
"province": {
"description": "Province in China (e.g. \u5e7f\u4e1c Guangdong, \u6d59\u6c5f Zhejiang, \u6c5f\u82cf Jiangsu, \u798f\u5efa Fujian, \u5c71\u4e1c Shandong)",
"type": "string"
},
"query": {
"description": "Search by company name \u2014 Chinese (\u5e7f\u5dde\u65b0\u946b) or English (Xinxin Garments)",
"type": "string"
},
"type": {
"description": "Supplier type",
"enum": [
"factory",
"trading_company",
"workshop",
"cooperative"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_suppliers",
"title": "Search Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the complete profile of a single Chinese apparel supplier by ID.\n\nPREREQUISITE: You MUST first call search_suppliers or recommend_suppliers to obtain a valid supplier_id. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"tell me more about [supplier]\" / \"show full details for sup_XXX\"\n- \"what certifications does this factory hold\"\n- \"what's their monthly capacity / worker count / equipment list\"\n- \"can [supplier] export to US / EU / Japan / Korea\"\n- \"give me the full profile / dossier / fact sheet for [supplier]\"\n- \"how verified is this supplier's data\" (returns coverage_pct + 8 dimensions)\n- \"what's their ownership type \u2014 own factory or broker\"\n- \"show payment terms / lead time / sample turnaround for sup_XXX\"\n- \"\u8fd9\u5bb6\u4f9b\u5e94\u5546\u5177\u4f53\u60c5\u51b5 / \u8be6\u7ec6\u8d44\u6599 / \u5de5\u5382\u6863\u6848\"\n- \"[\u4f9b\u5e94\u5546] \u7684\u5408\u89c4 / \u8ba4\u8bc1 / \u51fa\u53e3\u8d44\u8d28\"\n\nReturns 60+ fields including: monthly capacity (lab-verified), equipment list, certifications (BSCI/OEKO-TEX/GRS/SA8000), ownership type (own factory vs subcontractor vs broker), market access (US/EU/JP/KR), chemical compliance (ZDHC/MRSL), traceability depth, and verified_dimensions breakdown showing exactly which of the 8 dimensions (basic_info, geo_location, production, compliance, market_access, export, financial, contact) have data.\n\nWORKFLOW: search_suppliers \u2192 pick supplier_id \u2192 get_supplier_detail \u2192 optionally get_supplier_fabrics (fabric catalog) OR check_compliance (market export readiness) OR find_alternatives (backup pool) OR compare_suppliers (side-by-side evaluation).\nRETURNS: { data: { supplier_id, company_name_cn/en, type, province, city, product_types, worker_count, certifications, compliance_status, quality_score, verified_dimensions: { verified_dims: \"5/8\", coverage_pct, dimensions: {...} } } }\n\nEXAMPLES:\n\u2022 User: \"Show me the full profile for sup_001\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_001\" })\n\u2022 User: \"What certifications does Texhong hold and can they export to EU?\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_texhong_042\" }) \u2014 then inspect certifications + eu_market_ready; follow with check_compliance for formal verification\n\u2022 User: \"\u6211\u8981\u770b sup_123 \u7684\u5b8c\u6574\u6863\u6848\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_123\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 the supplier_id is invalid or outside free-tier access. Re-run search_suppliers to obtain a fresh valid ID. Do not guess sequential IDs.\n\u2022 Field returns null \u2192 that dimension is unverified for this supplier. Check verified_dimensions.coverage_pct before asserting data. If coverage_pct < 50, warn the user: \"This supplier's record has limited verified data (X/8 dimensions). Consider find_alternatives for better-documented options.\"\n\u2022 \"not available for public access\" \u2192 this supplier is in the reserve pool (paid tier only). Use search_suppliers filters data_confidence=verified to stay in public tier.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this for multiple suppliers in a loop \u2014 use compare_suppliers with up to 10 IDs at once. Do not call to browse the database \u2014 use search_suppliers or get_province_distribution for discovery.\n\nNOTE: Source: MRC Data (meacheal.ai). Every numeric field shows both declared and lab-verified values where available.\n\n\u4e2d\u6587\uff1a\u6309 ID \u83b7\u53d6\u5355\u4e2a\u4f9b\u5e94\u5546\u7684\u5b8c\u6574\u6863\u6848\uff08\u542b\u7ef4\u5ea6\u8986\u76d6\u7387\u8be6\u60c5\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers results, e.g. sup_001",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "get_supplier_detail",
"title": "Get Supplier Detail"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search the Chinese fabric and textile database with lab-tested specifications.\n\nUSE WHEN user asks:\n- \"find me a [cotton / polyester / nylon / wool / linen] fabric for [t-shirts / jeans / suits]\"\n- \"I need 180gsm jersey knit with verified composition\"\n- \"fabrics under N RMB/meter for womenswear\"\n- \"compare lab-tested fabric weight across suppliers\"\n- \"show me functional fabrics for activewear / sportswear\"\n- \"what woven fabrics work for shirting\"\n- \"list organic / GOTS / recycled fabrics\"\n- \"I want heavyweight denim above 12 oz\"\n- \"fabrics with stretch / spandex content 2-5%\"\n- \"give me another page\" (pagination via offset)\n- \"lab-verified composition for [product]\" (quality check)\n- \"\u627e\u9762\u6599 / \u641c\u9762\u6599 / \u67e5\u9762\u6599 / \u627e\u5e03\u6599 / \u6253\u6837\u9762\u6599\"\n- \"\u6211\u8981\u505a T \u6064\uff0c\u5e2e\u6211\u627e\u514b\u91cd 180-220 \u7684\u9488\u7ec7\u9762\u6599\"\n\nFilters: category (woven/knit/nonwoven/leather/functional), weight range (gsm),\ncomposition keyword, target apparel type, max price. Returns paginated fabric list\nwith name, lab-tested weight, lab-tested composition, price range, suitable\napparel, and data confidence level.\n\nWORKFLOW: Primary entry point for fabric discovery. search_fabrics \u2192 get_fabric_detail (full 30+ lab-test fields) OR get_fabric_suppliers (compare supplier prices for same fabric) OR estimate_cost (budget the product).\nRETURNS: { has_more: boolean, available_dimensions: [\"basic_info\",\"composition\",\"physical_properties\",\"lab_test\",\"commercial\"], data: [{ fabric_id, name_cn, category, subcategory, declared_weight_gsm, declared_composition, price_range_rmb, suitable_for, verified_dims: \"4/5\", coverage_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Find 180-220gsm cotton jersey for t-shirts under 35 RMB/m\"\n \u2192 search_fabrics({ category: \"knit\", min_weight_gsm: 180, max_weight_gsm: 220, composition: \"cotton\", suitable_for: \"t-shirt\", max_price_rmb: 35 })\n\u2022 User: \"I need stretch denim for women's jeans\"\n \u2192 search_fabrics({ category: \"woven\", composition: \"spandex\", suitable_for: \"denim\" })\n\u2022 User: \"\u5e2e\u6211\u627e\u9002\u5408\u505a\u886c\u886b\u7684\u68ad\u7ec7\u9762\u6599\uff0c\u68c9 60% \u4ee5\u4e0a\"\n \u2192 search_fabrics({ category: \"woven\", composition: \"cotton\", suitable_for: \"shirt\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try in order: (1) drop suitable_for, (2) widen weight range by 50gsm each side, (3) broaden composition (e.g. \"cotton\" instead of \"organic cotton\"), (4) drop max_price_rmb, (5) try the parent category (knit \u2192 all).\n\u2022 Composition mismatch \u2192 TYPO_MAP normalizes common misspellings (e.g. \"poly\" \u2192 \"polyester\", \"lycra\" \u2192 \"spandex\"). If still no match, try the Chinese term (\u68c9/\u6da4\u7eb6/\u6c28\u7eb6/\u9526\u7eb6).\n\u2022 Rate limit 429 \u2192 wait 60 seconds. Do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"No fabric matches [criteria]. Would you like to broaden weight/price/composition?\"\n\nAVOID: Do not call this looking for a specific named fabric SKU \u2014 search by specs instead (weight + composition + category). Do not fetch full lab-test data this way \u2014 use get_fabric_detail. Do not call repeatedly for supplier pricing on the same fabric \u2014 use get_fabric_suppliers.\n\nCONSTRAINT: This returns summaries only \u2014 for full lab-test results (color fastness, shrinkage, pilling, tensile strength), call get_fabric_detail.\n\nNOTE: Source: MRC Data (meacheal.ai). Every record includes AATCC / ISO / GB lab test measurements where verified.\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u9762\u6599\u6570\u636e\u5e93\uff0c\u6309\u54c1\u7c7b\u3001\u514b\u91cd\u3001\u6210\u5206\u3001\u9002\u7528\u54c1\u7c7b\u3001\u4ef7\u683c\u7b5b\u9009\u3002\u6bcf\u6761\u5747\u542b AATCC / ISO / GB \u65b9\u6cd5\u7684\u5b9e\u6d4b\u6570\u636e\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"category": {
"description": "Fabric category: woven (\u68ad\u7ec7) / knit (\u9488\u7ec7) / nonwoven (\u65e0\u7eba) / leather (\u76ae\u9769) / fur (\u6bdb\u76ae) / functional (\u529f\u80fd\u6027)",
"type": "string"
},
"composition": {
"description": "Fiber composition keyword (e.g. cotton, polyester, spandex, nylon, wool, linen, \u68c9, \u6da4\u7eb6)",
"type": "string"
},
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"max_price_rmb": {
"description": "Maximum price in RMB per meter",
"type": "number"
},
"max_weight_gsm": {
"description": "Maximum fabric weight in grams per square meter",
"type": "number"
},
"min_weight_gsm": {
"description": "Minimum fabric weight in grams per square meter",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"suitable_for": {
"description": "Target apparel keyword (e.g. T\u6064 t-shirt, \u886c\u886b shirt, \u725b\u4ed4 denim, \u8fde\u8863\u88d9 dress)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_fabrics",
"title": "Search Fabrics"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the complete lab-tested record of a single fabric by ID.\n\nPREREQUISITE: You MUST first call search_fabrics to obtain a valid fabric_id. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"show me the full specs for fabric FAB-W007\"\n- \"what's the color fastness / shrinkage / pilling grade on [fabric]\"\n- \"lab-test data for [fabric]\" / \"\u5b9e\u6d4b\u6570\u636e\"\n- \"compare declared vs lab-measured weight for FAB-XXX\"\n- \"what's the MOQ / lead time / price for this fabric\"\n- \"tensile strength / tear strength / hand feel / drape / stretch recovery\"\n- \"can you confirm composition % on lab test for FAB-XXX\"\n- \"\u8be6\u7ec6\u53c2\u6570 / \u5b8c\u6574\u6863\u6848 / AATCC \u6570\u636e / \u68c0\u6d4b\u62a5\u544a\"\n- \"\u8fd9\u5757\u9762\u6599\u7684\u7f29\u6c34\u7387 / \u8272\u7262\u5ea6 / \u8d77\u7403\u7b49\u7ea7\"\n- \"follow-up: 'show me the full record for the first fabric in that list'\"\n\nReturns 30+ fields: lab-tested weight, lab-tested composition, color fastness (wash/light/rub per AATCC 61/16/8), shrinkage (warp/weft per AATCC 135), tensile/tear strength, pilling grade, hand feel, drape, stretch/recovery, MOQ, lead time, price range.\n\nWORKFLOW: search_fabrics \u2192 pick fabric_id \u2192 get_fabric_detail \u2192 optionally get_fabric_suppliers (to find which factories supply it at what price) OR detect_discrepancy (if user doubts declared specs).\nRETURNS: { data: { fabric_id, name_cn/en, category, all lab-test fields, verified_dimensions: { basic_info, composition, physical_properties, lab_test, commercial } } }\n\nEXAMPLES:\n\u2022 User: \"Show me all lab-test data for FAB-W007\"\n \u2192 get_fabric_detail({ fabric_id: \"FAB-W007\" })\n\u2022 User: \"What's the shrinkage and pilling grade on the second fabric I just saw?\"\n \u2192 get_fabric_detail({ fabric_id: \"<the_id_from_search>\" })\n\u2022 User: \"\u6211\u8981 FAB-K023 \u7684\u5b8c\u6574\u5b9e\u6d4b\u6863\u6848\"\n \u2192 get_fabric_detail({ fabric_id: \"FAB-K023\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Fabric not found\" \u2192 the fabric_id is invalid. Re-run search_fabrics and use an ID from the fresh results.\n\u2022 Field returns null \u2192 that test wasn't performed on this fabric. Check verified_dimensions.lab_test to see what IS tested before asserting anything.\n\u2022 \"not available\" \u2192 unverified fabric in reserve pool. Filter search_fabrics for higher data_confidence.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call in a loop for multiple fabrics \u2014 if user wants to compare fabrics, present the search_fabrics summary list instead. Do not call to browse \u2014 use search_fabrics with filters.\n\nNOTE: Source: MRC Data (meacheal.ai). AATCC/ISO/GB methods cited per field.\n\n\u4e2d\u6587\uff1a\u6309 ID \u83b7\u53d6\u5355\u4e2a\u9762\u6599\u7684\u5b8c\u6574\u5b9e\u6d4b\u6863\u6848\uff08\u542b AATCC/ISO/GB \u68c0\u6d4b\u6307\u6807\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_id": {
"description": "Fabric ID from search_fabrics results, e.g. FAB-W007",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"fabric_id"
],
"type": "object"
},
"name": "get_fabric_detail",
"title": "Get Fabric Detail"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search Chinese apparel industrial clusters and textile markets.\n\nUSE WHEN user asks:\n- \"where is China's [denim / suit / women's wear / underwear] manufacturing concentrated\"\n- \"what is the largest [silk / cashmere / down jacket] industrial cluster in China\"\n- \"industrial cluster comparison Humen vs Shaoxing vs Haining vs Zhili\"\n- \"recommend an industrial cluster for sourcing [product]\"\n- \"where should I set up a sourcing office for [category]\"\n- \"list mega clusters for [category]\"\n- \"fabric markets in Zhejiang / Jiangsu\"\n- \"accessories / trim / zipper / button markets in China\"\n- \"which province dominates [category] exports\"\n- \"follow-up: 'tell me more about Humen's cluster scale'\"\n- \"\u670d\u88c5\u4ea7\u4e1a\u5e26 / \u9762\u6599\u5e02\u573a / \u4ea7\u4e1a\u96c6\u7fa4 / \u7eba\u7ec7\u96c6\u7fa4 / \u8f85\u6599\u5e02\u573a\"\n- \"\u505a [\u54c1\u7c7b] \u5e94\u8be5\u53bb\u54ea\u4e2a\u4ea7\u4e1a\u5e26 / \u96c6\u7fa4\u63a8\u8350\"\n\nFamous clusters this database covers include: Humen (Guangdong, womenswear), Shaoxing\nKeqiao (Zhejiang, fabric mega-market), Haining (Zhejiang, leather), Zhili (Zhejiang,\nchildren's wear), Shengze (Jiangsu, silk), Shantou (Guangdong, underwear), Puning\n(Guangdong, jeans), Jinjiang (Fujian, sportswear), and more.\n\nReturns paginated cluster list with name, location, specialization, scale, supplier\ncount, average rent and labor cost, and key advantages/risks.\n\nWORKFLOW: Cluster discovery entry point. search_clusters \u2192 compare_clusters (side-by-side up to 10 cluster_ids) OR get_cluster_suppliers (list factories in that cluster) OR analyze_market (broader market view).\nRETURNS: { has_more: boolean, data: [{ cluster_id, name_cn, name_en, type, province, city, specialization, scale, supplier_count, labor_cost_avg_rmb }] }\n\nEXAMPLES:\n\u2022 User: \"Where are the biggest denim clusters in China?\"\n \u2192 search_clusters({ specialization: \"denim\", scale: \"mega\" })\n\u2022 User: \"Show me fabric markets in Zhejiang\"\n \u2192 search_clusters({ province: \"Zhejiang\", type: \"fabric_market\" })\n\u2022 User: \"\u7ae5\u88c5\u4ea7\u4e1a\u5e26\u6709\u54ea\u4e9b\"\n \u2192 search_clusters({ specialization: \"\u7ae5\u88c5\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try in order: (1) drop scale filter, (2) broaden specialization (e.g. \"\u670d\u88c5\" instead of \"\u725b\u4ed4\"), (3) remove type, (4) remove province.\n\u2022 Specialization mismatch \u2192 both Chinese and English work. Synonyms: sportswear/\u8fd0\u52a8\u670d, womenswear/\u5973\u88c5, underwear/\u5185\u8863, denim/\u725b\u4ed4.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"No clusters match [criteria]. Try broader specialization or removing filters.\"\n\nAVOID: Do not use this for specific factory search \u2014 use search_suppliers. Do not compare clusters by calling search_clusters twice \u2014 use compare_clusters with cluster_ids.\n\nNOTE: Source: MRC Data (meacheal.ai). 170+ clusters mapped across 31 provinces.\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u4e2d\u56fd\u670d\u88c5\u4ea7\u4e1a\u5e26\u548c\u9762\u6599\u5e02\u573a\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"province": {
"description": "Province in China (e.g. Guangdong, Zhejiang, Jiangsu, Fujian, Shandong)",
"type": "string"
},
"scale": {
"description": "Cluster scale: mega / large / medium / small",
"type": "string"
},
"specialization": {
"description": "Primary specialization keyword (e.g. \u725b\u4ed4 denim, \u5973\u88c5 womenswear, \u7ae5\u88c5 childrenswear, \u5185\u8863 underwear, \u8fd0\u52a8\u670d sportswear)",
"type": "string"
},
"type": {
"description": "Cluster type: fabric_market (\u9762\u6599\u5e02\u573a) / garment_manufacturing (\u670d\u88c5\u5236\u9020) / accessories (\u8f85\u6599) / integrated (\u7efc\u5408)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_clusters",
"title": "Search Industrial Clusters"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Compare multiple Chinese apparel industrial clusters side-by-side on key metrics.\n\nPREREQUISITE: You MUST first call search_clusters to obtain valid cluster_ids. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"compare Humen vs Shishi vs Jinjiang\"\n- \"which cluster has lower labor cost \u2014 Humen or Dongguan\"\n- \"side-by-side: Haining vs Xintang for denim\"\n- \"evaluate 3 clusters for my sportswear line\"\n- \"\u5bf9\u6bd4 [\u4ea7\u4e1a\u5e261] \u548c [\u4ea7\u4e1a\u5e262]\" / \"\u54ea\u4e2a\u96c6\u7fa4\u66f4\u9002\u5408 [\u54c1\u7c7b]\"\n- \"rank these clusters by supplier count\"\n- \"which cluster has the highest scale for womenswear\"\n- \"follow-up: 'now compare the top 3 clusters you just listed'\"\n\nReturns full records for each cluster so they can be compared on labor cost, rent, supplier count, scale, specializations, advantages, and risks.\n\nWORKFLOW: search_clusters \u2192 collect cluster_ids \u2192 compare_clusters \u2192 optionally get_cluster_suppliers on the winner to list factories in that specific cluster.\nRETURNS: { count: number, data: [full cluster objects with all fields] }\n\nEXAMPLES:\n\u2022 User: \"Compare Humen, Shishi, and Jinjiang for sportswear sourcing\"\n \u2192 compare_clusters({ cluster_ids: [\"humen_women\", \"shishi_casual\", \"jinjiang_sportswear\"] })\n\u2022 User: \"I want to evaluate Keqiao vs Zhili fabric markets\"\n \u2192 compare_clusters({ cluster_ids: [\"keqiao_fabric\", \"zhili_children\"] })\n\u2022 User: \"\u5bf9\u6bd4\u864e\u95e8\u3001\u77f3\u72ee\u3001\u664b\u6c5f\u4e09\u4e2a\u4ea7\u4e1a\u5e26\"\n \u2192 compare_clusters({ cluster_ids: [\"humen_women\", \"shishi_casual\", \"jinjiang_sportswear\"] })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Too many IDs (>10)\" \u2192 split into batches of 10 and aggregate results in your response.\n\u2022 Fewer results than IDs sent \u2192 missing IDs were silently skipped (invalid cluster_id). Re-run search_clusters to verify IDs.\n\u2022 Empty data \u2192 all IDs were invalid. Re-run search_clusters and try again with fresh IDs.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call with guessed cluster_ids \u2014 always resolve them via search_clusters first. Do not use to list factories in a cluster \u2014 use get_cluster_suppliers. Do not compare > 10 clusters in one call.\n\nCONSTRAINT: Max 10 cluster IDs per call.\n\nNOTE: Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5bf9\u6bd4\u591a\u4e2a\u4ea7\u4e1a\u5e26\u7684\u6838\u5fc3\u6307\u6807\uff08\u6700\u591a 10 \u4e2a\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cluster_ids": {
"description": "Array of cluster IDs to compare, max 10",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"cluster_ids"
],
"type": "object"
},
"name": "compare_clusters",
"title": "Compare Industrial Clusters"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "[Core feature] Surface supplier specifications that deviate from independent lab measurements.\n\nUSE WHEN user asks:\n- \"which fabrics have lab-test deviations on weight\"\n- \"find suppliers whose stated capacity differs from on-site measurements\"\n- \"compare cotton content lab results across suppliers\"\n- \"which suppliers have the closest match between specs and lab tests\"\n- \"show me suppliers with >20% capacity over-reporting\"\n- \"which factories inflate worker count\"\n- \"audit integrity check on our supplier pool\"\n- \"follow-up: 'are any of these suppliers flagged for discrepancy?'\"\n- \"data integrity / quality audit / spec validation\"\n- \"\u5b9e\u6d4b\u6570\u636e / \u6570\u636e\u53ef\u4fe1\u5ea6 / \u89c4\u683c\u4e0e\u5b9e\u6d4b\u504f\u5dee / \u865a\u62a5\u4ea7\u80fd / \u6210\u5206\u4e0d\u7b26\"\n- \"\u54ea\u4e9b\u4f9b\u5e94\u5546\u4ea7\u80fd\u9020\u5047 / \u6570\u636e\u4e0d\u51c6\"\n\nThis is the moat of MRC Data \u2014 every record is enriched with AATCC / ISO / GB\nlab test data, giving AI agents verifiable specifications instead of unaudited\nB2B directory listings.\n\nReturns up to 50 records across: fabric_weight (gsm), fabric_composition (fiber %),\nsupplier_capacity (monthly pcs), worker_count. Each record includes both the\nspec value and the lab measurement, with the deviation percentage.\n\nWORKFLOW: Standalone audit tool \u2014 does not require prior search. Call directly with field type and threshold. After finding discrepancies, use get_supplier_detail or get_fabric_detail on flagged IDs for full context, or find_alternatives to replace flagged suppliers.\nRETURNS: { field, min_discrepancy_pct, count, data: [{ id, name, declared_value, tested_value, discrepancy_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Which fabrics have more than 10% weight deviation from their spec sheets?\"\n \u2192 detect_discrepancy({ field: \"fabric_weight\", min_discrepancy_pct: 10 })\n\u2022 User: \"Find suppliers whose declared monthly capacity is >25% off from verified measurements\"\n \u2192 detect_discrepancy({ field: \"supplier_capacity\", min_discrepancy_pct: 25 })\n\u2022 User: \"\u54ea\u4e9b\u9762\u6599\u7684\u6210\u5206\u8ddf\u5b9e\u6d4b\u4e0d\u4e00\u6837\"\n \u2192 detect_discrepancy({ field: \"fabric_composition\" }) \u2014 composition is exact-match, no threshold\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 no records above threshold. Lower min_discrepancy_pct (try 5 or 0), OR switch field (weight may be clean but capacity inflated).\n\u2022 Only partial dataset returned \u2192 many records have only declared OR only tested values; discrepancy requires both. This is a data coverage limit, not a bug.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not present discrepancy data as proof of fraud \u2014 call it out as \"declared vs lab-measured delta\". Do not loop over thresholds \u2014 call once with min_discrepancy_pct=0 and filter in your response.\n\nCONSTRAINT: Only works when both declared AND tested values exist for the same record. Many records have only one or the other. Max 50 records per call.\n\nNOTE: Source: MRC Data (meacheal.ai). Methods: AATCC / ISO / GB per field.\n\n\u4e2d\u6587\uff1a\u8bc6\u522b\u4f9b\u5e94\u5546\u89c4\u683c\u4e0e\u5b9e\u6d4b\u503c\u504f\u5dee\u8f83\u5927\u7684\u8bb0\u5f55\u3002\u8fd4\u56de\u89c4\u683c\u503c\u3001\u5b9e\u6d4b\u503c\u3001\u504f\u5dee\u767e\u5206\u6bd4\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"field": {
"description": "Type of discrepancy to detect: fabric_weight (\u9762\u6599\u514b\u91cd) / fabric_composition (\u6210\u5206) / supplier_capacity (\u4ea7\u80fd) / worker_count (\u5de5\u4eba\u6570)",
"enum": [
"fabric_weight",
"fabric_composition",
"supplier_capacity",
"worker_count"
],
"type": "string"
},
"min_discrepancy_pct": {
"default": 0,
"description": "Minimum discrepancy threshold as percentage (e.g. 10 = only show \u226510% mismatch)",
"type": "number"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"field"
],
"type": "object"
},
"name": "detect_discrepancy",
"title": "Detect Spec Discrepancies"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all fabrics a specific supplier can provide, with quoted prices.\n\nUSE WHEN user asks:\n- \"what fabrics does [supplier name] have\" / \"what can this factory source for me\"\n- \"show me the catalog of supplier sup_XXX\"\n- \"what does this manufacturer offer\"\n- \"what fabric options does sup_XXX quote for denim\"\n- \"does [supplier] supply [fabric type]\"\n- \"price list / fabric catalog / offering sheet for sup_XXX\"\n- \"MOQ per fabric at this supplier\"\n- \"follow-up: 'what fabrics can they supply?' after identifying a supplier\"\n- \"[\u4f9b\u5e94\u5546] \u80fd\u4f9b\u5e94\u54ea\u4e9b\u9762\u6599 / \u62a5\u4ef7\u8868 / \u8d77\u8ba2\u91cf\"\n\nReturns fabric records linked to the supplier with: fabric name, category, weight,\ncomposition, and the supplier's quoted price + MOQ for that specific fabric.\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers or get_supplier_detail.\nWORKFLOW: search_suppliers \u2192 get_supplier_detail \u2192 get_supplier_fabrics \u2192 optionally get_fabric_detail (for lab-test data on a specific fabric) OR get_fabric_suppliers (cross-check price vs other suppliers for same fabric).\nRETURNS: { supplier_id, count, data: [{ fabric_id, name_cn, category, weight, composition, price_rmb, moq }] }\n\nEXAMPLES:\n\u2022 User: \"What fabrics does sup_texhong_042 offer?\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_texhong_042\" })\n\u2022 User: \"Show me the fabric catalog and MOQs for sup_001\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_001\" })\n\u2022 User: \"sup_234 \u80fd\u505a\u54ea\u4e9b\u9762\u6599\uff0c\u62a5\u4ef7\u591a\u5c11\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_234\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 this supplier has no linked fabric catalog in the database. Either (a) they don't self-source fabrics (CMT-only) \u2014 confirm via get_supplier_detail.ownership_type, or (b) their catalog is unmapped \u2014 use search_fabrics with their expected specialization instead.\n\u2022 \"Supplier not found\" (implicit) \u2192 the supplier_id is invalid. Re-run search_suppliers.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this for a general fabric search \u2014 use search_fabrics. Do not call to compare prices across suppliers for the SAME fabric \u2014 use get_fabric_suppliers instead.\n\nNOTE: Source: MRC Data (meacheal.ai). Prices are supplier-quoted, not binding offers.\n\n\u4e2d\u6587\uff1a\u67e5\u8be2\u67d0\u4f9b\u5e94\u5546\u80fd\u4f9b\u5e94\u7684\u6240\u6709\u9762\u6599\u53ca\u5176\u62a5\u4ef7\u3001\u8d77\u8ba2\u91cf\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers, e.g. sup_001",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "get_supplier_fabrics",
"title": "Get Supplier's Fabric Catalog"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all suppliers offering a specific fabric, sorted by quality score, with price comparison.\n\nUSE WHEN user asks:\n- \"who supplies fabric fab_XXX\" / \"where can I buy this fabric\"\n- \"compare prices for [fabric] across suppliers\"\n- \"best supplier for [fabric specification]\"\n- \"which factory has the lowest price on FAB-XXX\"\n- \"rank suppliers by quality for this fabric\"\n- \"follow-up: 'who else sells this?'\"\n- \"source comparison for [fabric]\"\n- \"price spread on FAB-XXX\"\n- \"\u8c01\u5bb6\u6709\u8fd9\u5757\u9762\u6599 / \u54ea\u4e2a\u5382\u62a5\u4ef7\u6700\u4f4e / \u9762\u6599\u4f9b\u5e94\u5546\u5bf9\u6bd4\"\n- \"[\u9762\u6599] \u6709\u54ea\u4e9b\u4f9b\u5e94\u5546 / \u8d27\u6e90\"\n\nReturns supplier records linked to the fabric with: company name, location, quality\nscore, and that supplier's quoted price + MOQ for the fabric. Sorted by supplier\nquality score so the most reliable options appear first.\n\nPREREQUISITE: You MUST have a valid fabric_id from search_fabrics.\nWORKFLOW: search_fabrics \u2192 pick fabric_id \u2192 get_fabric_suppliers \u2192 optionally get_supplier_detail (vet the top-ranked supplier) OR compare_suppliers (up to 10 IDs from this list).\nRETURNS: { fabric_id, count, data: [{ supplier_id, company_name_cn, province, city, quality_score, price_rmb, moq }] }\n\nEXAMPLES:\n\u2022 User: \"Who supplies FAB-W007 and at what price?\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-W007\" })\n\u2022 User: \"Compare all suppliers for fabric FAB-K023\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-K023\" })\n\u2022 User: \"FAB-123 \u6709\u54ea\u4e9b\u4f9b\u5e94\u5546\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-123\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 no suppliers linked to this fabric. Either (a) fabric is a spec-sheet reference with no mapped source, or (b) suppliers carry this fabric but the link isn't captured. Try search_suppliers filtered by the fabric's typical specialization (e.g. denim cluster) instead.\n\u2022 \"Fabric not found\" (implicit) \u2192 fabric_id invalid. Re-run search_fabrics.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this to browse suppliers generally \u2014 use search_suppliers. Do not call to see a supplier's full fabric range \u2014 use get_supplier_fabrics.\n\nNOTE: Source: MRC Data (meacheal.ai). Sorted by supplier quality_score DESC.\n\n\u4e2d\u6587\uff1a\u67e5\u8be2\u67d0\u9762\u6599\u7684\u6240\u6709\u4f9b\u5e94\u5546\uff0c\u6309\u8d28\u91cf\u8bc4\u5206\u6392\u5e8f\uff0c\u542b\u62a5\u4ef7\u5bf9\u6bd4\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_id": {
"description": "Fabric ID from search_fabrics, e.g. FAB-W007",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"fabric_id"
],
"type": "object"
},
"name": "get_fabric_suppliers",
"title": "Get Fabric's Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all product categories available in the database with supplier counts.\n\nUSE THIS FIRST when:\n- User doesn't know what to search for\n- User asks \"what do you have\" / \"what can I source\"\n- User needs to explore the database\n- \"what's the most common product category in Guangdong\"\n- \"show me all product types you cover\"\n- \"which categories have the most suppliers\"\n- \"what apparel categories exist in [province]\"\n- \"database catalog / inventory overview / category list\"\n- \"\u6709\u54ea\u4e9b\u54c1\u7c7b / \u80fd\u627e\u4ec0\u4e48 / \u8986\u76d6\u54ea\u4e9b\u4ea7\u54c1 / \u54c1\u7c7b\u5206\u5e03\"\n- \"[\u7701\u4efd] \u4e3b\u8981\u505a\u4ec0\u4e48\u54c1\u7c7b\"\n\nWORKFLOW: Standalone discovery entry point. get_product_categories \u2192 search_suppliers (with the product_type the user picks) OR analyze_market (for market depth on that category).\nRETURNS: { total_categories, province_filter, data: [{ category: \"T\u6064\", supplier_count: 523 }, ...] }\n\nEXAMPLES:\n\u2022 User: \"What product types does your database cover?\"\n \u2192 get_product_categories({})\n\u2022 User: \"What categories are Guangdong suppliers making?\"\n \u2192 get_product_categories({ province: \"Guangdong\" })\n\u2022 User: \"\u6d59\u6c5f\u4e3b\u8981\u751f\u4ea7\u4ec0\u4e48\u54c1\u7c7b\"\n \u2192 get_product_categories({ province: \"Zhejiang\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 the province has no verified suppliers with typed product_types. Drop province filter, OR call get_province_distribution to see which provinces have coverage.\n\u2022 Invalid province \u2192 use English (Guangdong) or Chinese (\u5e7f\u4e1c). normalizeProvince handles both.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this before every search \u2014 it's an exploratory tool. Do not use for geographic insight \u2014 use get_province_distribution.\n\nNOTE: Returns all categories ranked by supplier count, so the most available product types appear first. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5217\u51fa\u6570\u636e\u5e93\u4e2d\u6240\u6709\u54c1\u7c7b\u53ca\u5176\u4f9b\u5e94\u5546\u6570\u91cf\uff0c\u6309\u6570\u91cf\u6392\u5e8f\u3002\u53ef\u6309\u7701\u4efd\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"province": {
"description": "Filter by province (e.g. guangdong, \u5e7f\u4e1c)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_product_categories",
"title": "List Product Categories"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Show supplier distribution across Chinese provinces.\n\nUSE WHEN:\n- User asks \"where are factories located\" / \"which provinces\"\n- User needs to decide which region to source from\n- \"where's [product] manufacturing concentrated in China\"\n- \"top provinces for [category]\"\n- \"geographic heatmap of suppliers for [product]\"\n- \"is sportswear mostly in Fujian or Zhejiang\"\n- \"which cities lead denim production\"\n- \"follow-up: 'break it down by province'\"\n- \"\u54ea\u91cc\u6709\u5de5\u5382 / \u4f9b\u5e94\u5546\u5206\u5e03 / \u4ea7\u4e1a\u5206\u5e03 / \u5730\u57df\u5206\u5e03\"\n- \"[\u54c1\u7c7b] \u4e3b\u8981\u5728\u54ea\u51e0\u4e2a\u7701 / \u54ea\u4e2a\u7701\u6700\u96c6\u4e2d\"\n\nWORKFLOW: Standalone discovery tool. get_province_distribution \u2192 search_suppliers (with top province) OR search_clusters (for clusters within that province) OR analyze_market (deeper view).\nRETURNS: { total_provinces, data: [{ province, supplier_count, top_cities: [{ city, count }] }] }\n\nEXAMPLES:\n\u2022 User: \"Where are most Chinese apparel factories located?\"\n \u2192 get_province_distribution({})\n\u2022 User: \"Which provinces lead in sportswear manufacturing?\"\n \u2192 get_province_distribution({ product_type: \"sportswear\" })\n\u2022 User: \"\u725b\u4ed4\u5de5\u5382\u4e3b\u8981\u5206\u5e03\u5728\u54ea\"\n \u2192 get_province_distribution({ product_type: \"denim\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data for product_type \u2192 product_type keyword may not match. Try TYPO_MAP synonyms (tee\u2192t-shirt, jeans\u2192denim, \u8fd0\u52a8\u670d\u2192activewear) or drop the filter entirely.\n\u2022 Sparse results (< 3 provinces) \u2192 the product is niche. Try the parent category or broaden the term.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call for cluster-level granularity \u2014 use search_clusters. Do not call without product_type if user is asking about a specific category \u2014 the unfiltered output is generic.\n\nNOTE: Provinces are ranked by supplier count (Guangdong, Zhejiang, Jiangsu, Fujian typically lead). Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u6309\u7701\u4efd\u5c55\u793a\u4f9b\u5e94\u5546\u5206\u5e03\uff0c\u542b\u6bcf\u7701 Top \u57ce\u5e02\u3002\u53ef\u6309\u54c1\u7c7b\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"product_type": {
"description": "Filter by product type (e.g. sportswear, t-shirt, \u8fd0\u52a8\u670d)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_province_distribution",
"title": "Province Distribution"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Smart supplier recommendation based on sourcing requirements.\n\nUSE WHEN:\n- User describes what they need: \"I need a factory for cotton t-shirts in Guangdong\"\n- User asks for recommendations, not just search results\n- \"who's the best factory for [product]\"\n- \"recommend a top supplier for my [product] line\"\n- \"shortlist 5 suppliers for [product] in [province]\"\n- \"best own-factory (not broker) for [product]\"\n- \"give me the top [product] manufacturer\"\n- \"which factory should I go with for [product]\"\n- \"\u63a8\u8350\u4f9b\u5e94\u5546 / \u5e2e\u6211\u627e\u5408\u9002\u7684\u5de5\u5382 / \u6700\u597d\u7684 [\u54c1\u7c7b] \u5382\"\n- \"\u5e2e\u6211\u6392\u4e2a\u4f18\u5148\u7ea7 / \u63a8\u8350\u51e0\u5bb6\u6700\u597d\u7684\"\n- \"\u6211\u60f3\u505a [\u54c1\u7c7b]\uff0c\u7ed9\u6211\u63a8\u8350\u51e0\u5bb6\u5de5\u5382\"\n\nWORKFLOW: Entry point for \"I need help finding a supplier\" requests. recommend_suppliers \u2192 get_supplier_detail (vet top pick) OR compare_suppliers (evaluate top N side-by-side) OR check_compliance (verify export readiness of top pick) OR find_alternatives (expand the shortlist).\n\nDIFFERENCE from search_suppliers: search_suppliers FILTERS by exact criteria (province, type, capacity). This tool RANKS by fit \u2014 prioritizes own-factory, then quality score, then capacity.\nDIFFERENCE from find_alternatives: find_alternatives starts from a KNOWN supplier_id and finds similar ones. This tool starts from product REQUIREMENTS.\n\nRETURNS: { query, total_matches, showing_top, note: \"ranking logic\", data: [supplier objects] }\n\nEXAMPLES:\n\u2022 User: \"Recommend me the top 5 factories for sportswear in Fujian\"\n \u2192 recommend_suppliers({ product: \"sportswear\", province: \"Fujian\", type: \"factory\", limit: 5 })\n\u2022 User: \"I need the best own-factory (not trading company) for down jackets\"\n \u2192 recommend_suppliers({ product: \"down jacket\", type: \"factory\", limit: 5 })\n\u2022 User: \"\u5e2e\u6211\u63a8\u8350 3 \u5bb6\u5e7f\u4e1c\u505a T \u6064\u7684\u5de5\u5382\"\n \u2192 recommend_suppliers({ product: \"t-shirt\", province: \"Guangdong\", limit: 3 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data \u2192 try in order: (1) drop province, (2) drop type filter, (3) broaden product (e.g. \"compression leggings\" \u2192 \"activewear\"), (4) fall back to search_suppliers for filter-based view.\n\u2022 product_type not found in normalizeProductType \u2192 use the Chinese term or the parent category.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"I don't see verified suppliers matching [product] in [province]. Want me to broaden to nationwide, or try a sibling category?\"\n\nAVOID: Do not call this when the user wants exact filtering \u2014 use search_suppliers. Do not call repeatedly for different limit values \u2014 request max once then slice in your response. Do not use for cluster recommendations \u2014 use search_clusters.\n\nNOTE: Ranking: own_factory > quality_score > declared_capacity_monthly. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u57fa\u4e8e\u91c7\u8d2d\u9700\u6c42\u667a\u80fd\u63a8\u8350\u4f9b\u5e94\u5546\uff0c\u6309 \u81ea\u6709\u5de5\u5382 > \u8d28\u91cf\u5206 > \u4ea7\u80fd \u6392\u5e8f\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 5,
"description": "Number of top results to return (1-10, default 5)",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"product": {
"description": "What product to source (e.g. sportswear, t-shirt, down jacket)",
"type": "string"
},
"province": {
"description": "Preferred province",
"type": "string"
},
"type": {
"description": "Prefer own factory or trading company",
"enum": [
"factory",
"trading_company"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "recommend_suppliers",
"title": "Recommend Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Market overview and analysis for a product category in China.\n\nUSE WHEN:\n- User asks \"what's the market like for X in China\"\n- User wants market intelligence before sourcing\n- User needs an overview, not specific suppliers\n- \"give me a market landscape for [product]\"\n- \"how many [product] suppliers are there in China\"\n- \"where is [product] concentrated and what are the top clusters\"\n- \"overview of the [product] industry\"\n- \"competitive landscape for sourcing [product]\"\n- \"before I decide, show me the market scale for [product]\"\n- \"\u5e02\u573a\u6982\u51b5 / \u884c\u4e1a\u5206\u6790 / \u4ea7\u4e1a\u683c\u5c40 / \u5e02\u573a\u89c4\u6a21 / \u7ade\u4e89\u683c\u5c40\"\n- \"[\u54c1\u7c7b] \u5728\u4e2d\u56fd\u7684\u5e02\u573a\u60c5\u51b5\u600e\u4e48\u6837\"\n\nWORKFLOW: analyze_market \u2192 search_suppliers or recommend_suppliers (narrow to specific suppliers) \u2192 compare_clusters (evaluate top clusters surfaced in related_clusters).\nRETURNS: { product, total_suppliers, by_province: [{province, cnt}], by_type: [{type, cnt}], related_clusters: [{name_cn, specialization, supplier_count}] }\n\nEXAMPLES:\n\u2022 User: \"What's the market landscape for sportswear sourcing in China?\"\n \u2192 analyze_market({ product: \"sportswear\" })\n\u2022 User: \"Give me an overview of the Chinese denim supply chain\"\n \u2192 analyze_market({ product: \"denim\" })\n\u2022 User: \"\u7ae5\u88c5\u5e02\u573a\u5728\u4e2d\u56fd\u7684\u683c\u5c40\"\n \u2192 analyze_market({ product: \"\u7ae5\u88c5\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 total_suppliers = 0 \u2192 product keyword unmatched. Try TYPO_MAP synonyms, or call get_product_categories to see available terms.\n\u2022 by_province sparse (< 3 entries) \u2192 the product is niche or keyword too specific. Try the parent category.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call for a specific supplier shortlist \u2014 use recommend_suppliers. Do not call for cluster details \u2014 use search_clusters. Do not call repeatedly for different products in a loop \u2014 batch the analysis in your response.\n\nNOTE: Bird's-eye view. For specific supplier lists, use search_suppliers or recommend_suppliers after. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5355\u4e2a\u54c1\u7c7b\u7684\u5e02\u573a\u603b\u89c8\uff08\u603b\u4f9b\u5e94\u5546\u6570\u3001\u7701\u4efd\u5206\u5e03\u3001\u7c7b\u578b\u5206\u5e03\u3001\u76f8\u5173\u4ea7\u4e1a\u5e26\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"product": {
"description": "Product category to analyze (e.g. sportswear, denim, underwear)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "analyze_market",
"title": "Analyze Market"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Estimate sourcing cost for a product based on fabric price, supplier pricing, and order quantity.\n\nUSE WHEN:\n- User asks \"how much would it cost to make 1000 t-shirts\"\n- User needs a rough cost breakdown for budgeting\n- \"ballpark cost to produce [quantity] [product] in China\"\n- \"budget estimate / sourcing cost / cost per piece for [product]\"\n- \"fabric cost + lead time estimate for [product]\"\n- \"how much to make [product] in [province]\"\n- \"rough quote / pricing range\"\n- \"can I make [product] for under $X per piece\"\n- \"\u591a\u5c11\u94b1 / \u6210\u672c\u4f30\u7b97 / \u62a5\u4ef7 / \u9884\u7b97 / \u505a\u4e00\u6279 [\u54c1\u7c7b] \u8981\u591a\u5c11\u94b1\"\n- \"[\u7701\u4efd] \u505a [\u54c1\u7c7b] \u7684\u6210\u672c\u5927\u6982\u591a\u5c11\"\n\nWORKFLOW: estimate_cost \u2192 optionally search_fabrics first to identify specific fabric_ids for accuracy \u2192 then recommend_suppliers for ready sources.\nRETURNS: { product, quantity, province, fabric_options: [{name, min_rmb, max_rmb, weight_gsm}], fabric_cost_per_meter, supplier_availability: { total_suppliers, avg_lead_time_days }, note }\n\nEXAMPLES:\n\u2022 User: \"Rough cost to make 1000 cotton t-shirts in Guangdong\"\n \u2192 estimate_cost({ product: \"t-shirt\", fabric_category: \"knit\", quantity: 1000, province: \"Guangdong\" })\n\u2022 User: \"What's the budget range for 5000 hoodies\"\n \u2192 estimate_cost({ product: \"hoodie\", quantity: 5000 })\n\u2022 User: \"\u505a 2000 \u4ef6\u7fbd\u7ed2\u670d\u5927\u6982\u591a\u5c11\u94b1\"\n \u2192 estimate_cost({ product: \"down jacket\", quantity: 2000 })\n\nERRORS & SELF-CORRECTION:\n\u2022 fabric_options empty \u2192 no matching fabrics for the product term. Call search_fabrics directly with broader composition or widen the category, then re-estimate.\n\u2022 supplier_availability.total_suppliers = 0 \u2192 drop province filter or broaden product term.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not present the output as a binding quote \u2014 always say \"estimate based on database averages, not binding\". Do not try to calculate per-piece cost from fabric alone \u2014 include labor, trim, margin externally. Do not use for detailed BOM costing \u2014 use search_fabrics + get_supplier_detail manually.\n\nCONSTRAINT: These are estimates based on database averages, NOT binding quotes. Always clarify this to the user. Fabric cost is per meter (typical usage: 1-3m per piece).\n\nNOTE: Cost accuracy improves when you provide a specific fabric_id via search_fabrics first. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u6309\u9762\u6599\u5747\u4ef7 + \u4f9b\u5e94\u5546\u4f9b\u8d27\u80fd\u529b\u4f30\u7b97 [\u54c1\u7c7b] \u7684\u751f\u4ea7\u6210\u672c\u533a\u95f4\u3002\u4ec5\u4f9b\u53c2\u8003\uff0c\u975e\u6b63\u5f0f\u62a5\u4ef7\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_category": {
"description": "Fabric category: knit, woven, functional",
"type": "string"
},
"product": {
"description": "Product type (e.g. t-shirt, hoodie, down jacket)",
"type": "string"
},
"province": {
"description": "Preferred sourcing province",
"type": "string"
},
"quantity": {
"default": 1000,
"description": "Order quantity in pieces",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "estimate_cost",
"title": "Estimate Sourcing Cost"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Check if a supplier meets compliance requirements for a target export market.\n\nUSE WHEN:\n- User asks \"can this factory export to the US/EU/Japan\"\n- User needs to verify certifications for a specific market\n- \"UFLPA / Xinjiang cotton / REACH / JIS / KC check on sup_XXX\"\n- \"is [supplier] ready for EU CSDDD / Forced Labor Regulation\"\n- \"what's missing for sup_XXX to export to US\"\n- \"gap analysis / compliance dossier for [supplier] \u2192 [market]\"\n- \"does [supplier] meet Japan formaldehyde / azo dye rules\"\n- \"follow-up after get_supplier_detail: 'is this one US-ready?'\"\n- \"\u80fd\u4e0d\u80fd\u51fa\u53e3\u7f8e\u56fd / \u6b27\u76df / \u65e5\u672c / \u97e9\u56fd\"\n- \"\u5408\u89c4\u68c0\u67e5 / \u8ba4\u8bc1\u8981\u6c42 / \u51fa\u53e3\u8d44\u8d28 / \u5f3a\u5236\u6027\u6cd5\u89c4 / UFLPA \u5408\u89c4\"\n- \"[\u4f9b\u5e94\u5546] \u80fd\u5426\u6ee1\u8db3 [\u5e02\u573a] \u7684\u51c6\u5165\u8981\u6c42\"\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers, get_supplier_detail, or recommend_suppliers.\nWORKFLOW: search_suppliers \u2192 check_compliance \u2192 if issues exist, use find_alternatives to source compliant alternatives OR get_supplier_detail to see the full compliance fields and coverage.\nRETURNS: { supplier_id, company_name, target_market, overall_ready: boolean, passed: [string], issues: [string], certifications: [string], market_requirements: {field: value}, note }\n\nEXAMPLES:\n\u2022 User: \"Can sup_001 export to the US? Check UFLPA compliance\"\n \u2192 check_compliance({ supplier_id: \"sup_001\", target_market: \"us\" })\n\u2022 User: \"Is Texhong EU REACH compliant?\"\n \u2192 check_compliance({ supplier_id: \"sup_texhong_042\", target_market: \"eu\" })\n\u2022 User: \"sup_234 \u80fd\u51fa\u53e3\u65e5\u672c\u5417\"\n \u2192 check_compliance({ supplier_id: \"sup_234\", target_market: \"japan\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 supplier_id invalid. Re-run search_suppliers.\n\u2022 passed=[] AND issues=[\"No specific issues found, but data may be incomplete\"] \u2192 the supplier's compliance fields are mostly null. Interpret as UNKNOWN not COMPLIANT. Tell user: \"Compliance data incomplete \u2014 recommend verifying directly with the supplier.\"\n\u2022 overall_ready=false with many issues \u2192 use find_alternatives to find backup suppliers, OR search_suppliers with compliance_status=\"compliant\" to filter upfront.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this in a loop across all suppliers \u2014 instead pre-filter via search_suppliers({ compliance_status: \"compliant\" }). Do not treat missing fields as non-compliant \u2014 report them as \"not confirmed\". Do not use for general supplier info \u2014 use get_supplier_detail.\n\nNOTE: Many suppliers have incomplete compliance data. Missing data = \"not confirmed\", not \"non-compliant\". Source: MRC Data (meacheal.ai). Market requirements cover UFLPA/Xinjiang (US), REACH/CSDDD/Forced Labor Reg (EU), formaldehyde/azo/JIS (Japan), KC (Korea).\n\n\u4e2d\u6587\uff1a\u68c0\u67e5\u67d0\u4f9b\u5e94\u5546\u662f\u5426\u6ee1\u8db3\u76ee\u6807\u51fa\u53e3\u5e02\u573a\uff08\u7f8e/\u6b27/\u65e5/\u97e9\uff09\u7684\u5408\u89c4\u8981\u6c42\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers, e.g. sup_001",
"type": "string"
},
"target_market": {
"description": "Target export market",
"enum": [
"us",
"eu",
"japan",
"korea"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id",
"target_market"
],
"type": "object"
},
"name": "check_compliance",
"title": "Check Export Compliance"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Find alternative suppliers similar to a given supplier.\n\nUSE WHEN:\n- User says \"this supplier is too expensive / too slow / too far\"\n- User needs backup options for an existing supplier\n- \"give me backup options for sup_XXX\"\n- \"find 5 alternatives to [supplier] in a different province\"\n- \"we need a cheaper / faster / closer / higher-quality alternative to sup_XXX\"\n- \"diversify our supplier pool away from [supplier]\"\n- \"de-risk single-source on sup_XXX\"\n- \"follow-up after get_supplier_detail: 'who else could make this?'\"\n- \"\u6709\u6ca1\u6709\u66ff\u4ee3 / \u627e\u7c7b\u4f3c\u7684 / \u6362\u4e00\u5bb6 / \u5907\u9009\u4f9b\u5e94\u5546 / \u5206\u6563\u4f9b\u5e94\u94fe\"\n- \"[\u4f9b\u5e94\u5546] \u592a\u8d35\u4e86 / \u592a\u6162\u4e86\uff0c\u6362\u4e00\u5bb6\"\n- \"\u7ed9\u6211\u51e0\u4e2a\u5907\u7528\u5de5\u5382 / \u5907\u9009\u65b9\u6848\"\n\nFinds suppliers that make the same products, optionally in a different\nprovince or with different attributes. Results exclude the original supplier.\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers, get_supplier_detail, or recommend_suppliers.\nWORKFLOW: search_suppliers \u2192 identify a candidate \u2192 find_alternatives \u2192 compare_suppliers (evaluate alternatives side-by-side) OR check_compliance (vet each alternative for target market).\n\nDIFFERENCE from recommend_suppliers: recommend_suppliers starts from product REQUIREMENTS. This tool starts from a KNOWN supplier_id and finds similar alternatives.\nDIFFERENCE from search_suppliers: search_suppliers filters by criteria. This tool uses an existing supplier as the baseline reference.\n\nRETURNS: { original_supplier, reason, alternatives: [supplier summaries], attribution }\n\nEXAMPLES:\n\u2022 User: \"sup_001 is too slow. Find 5 faster alternatives\"\n \u2192 find_alternatives({ supplier_id: \"sup_001\", reason: \"faster\", limit: 5 })\n\u2022 User: \"Give me cheaper backup options for sup_042 in Zhejiang\"\n \u2192 find_alternatives({ supplier_id: \"sup_042\", reason: \"cheaper\", province: \"Zhejiang\", limit: 5 })\n\u2022 User: \"sup_123 \u8d28\u91cf\u4e0d\u884c\uff0c\u63a8\u8350\u51e0\u5bb6\u8d28\u91cf\u66f4\u597d\u7684\"\n \u2192 find_alternatives({ supplier_id: \"sup_123\", reason: \"better_quality\", limit: 5 })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 supplier_id invalid. Re-run search_suppliers.\n\u2022 \"Original supplier has no product types listed\" \u2192 the reference supplier has no product_types field. Use recommend_suppliers with the product category the user actually wants instead.\n\u2022 Empty alternatives \u2192 the product type is rare OR province filter is too narrow. Drop province filter first, then try broader product search via recommend_suppliers.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this without first knowing the user's complaint (cheaper/faster/closer/quality) \u2014 without reason, results are generic. Do not call to find a supplier from scratch \u2014 use recommend_suppliers or search_suppliers. Do not compare via this tool \u2014 use compare_suppliers after.\n\nCONSTRAINT: Max 10 alternatives per call. Query matches up to 3 product types from the reference supplier.\n\nNOTE: Source: MRC Data (meacheal.ai). Sorting: \"faster\" uses lead_time_days.bulk_min ASC; others use quality_score DESC.\n\n\u4e2d\u6587\uff1a\u57fa\u4e8e\u5df2\u77e5 supplier_id \u67e5\u627e\u540c\u54c1\u7c7b\u7684\u5907\u9009\u4f9b\u5e94\u5546\uff08\u652f\u6301\u6309 \u4fbf\u5b9c/\u5feb/\u8fd1/\u8d28\u91cf \u6392\u5e8f\uff0c\u53ef\u9650\u5b9a\u7701\u4efd\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 5,
"description": "Number of top results to return (1-10, default 5)",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"province": {
"description": "Preferred province for alternatives",
"type": "string"
},
"reason": {
"default": "any",
"description": "Why looking for alternatives",
"enum": [
"cheaper",
"faster",
"closer",
"better_quality",
"any"
],
"type": "string"
},
"supplier_id": {
"description": "Current supplier ID to find alternatives for",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "find_alternatives",
"title": "Find Alternative Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Compare multiple suppliers side by side on all dimensions.\n\nUSE WHEN user asks:\n- \"compare these 3 factories\"\n- \"which supplier is better between X and Y\"\n- \"benchmark sup_001 vs sup_002 vs sup_003\"\n- \"side-by-side: capacity, certifications, quality score\"\n- \"rank these 5 suppliers by [dimension]\"\n- \"evaluate my shortlist\"\n- \"which of [supplier list] has the highest verified capacity\"\n- \"follow-up after recommend_suppliers: 'compare the top 3'\"\n- \"\u5bf9\u6bd4 [\u4f9b\u5e94\u5546 A] \u548c [\u4f9b\u5e94\u5546 B] / \u5bf9\u6bd4\u4f9b\u5e94\u5546 / \u4f9b\u5e94\u5546\u6a2a\u8bc4\"\n- \"\u54ea\u5bb6\u6700\u597d / \u6a2a\u5411\u8bc4\u4f30 / \u6bd4\u8f83\u8fd9\u51e0\u5bb6\"\n\nPREREQUISITE: You MUST have valid supplier_ids from search_suppliers, recommend_suppliers, find_alternatives, or get_cluster_suppliers. Do not guess IDs.\nWORKFLOW: search_suppliers/recommend_suppliers \u2192 collect supplier_ids \u2192 compare_suppliers \u2192 optionally check_compliance (verify top picks for target market) OR find_alternatives (expand the shortlist).\n\nDIFFERENCE from get_supplier_detail: This returns multiple suppliers at once for comparison. get_supplier_detail returns one with verified_dimensions breakdown.\n\nRETURNS: { count, data: [full supplier profiles with all fields] }\n\nEXAMPLES:\n\u2022 User: \"Compare sup_001, sup_002, sup_003 for me\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_001\", \"sup_002\", \"sup_003\"] })\n\u2022 User: \"Benchmark the top 5 you just recommended\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_A\", \"sup_B\", \"sup_C\", \"sup_D\", \"sup_E\"] })\n\u2022 User: \"\u6a2a\u5411\u5bf9\u6bd4 sup_100\u3001sup_200\u3001sup_300\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_100\", \"sup_200\", \"sup_300\"] })\n\nERRORS & SELF-CORRECTION:\n\u2022 Fewer results than IDs sent \u2192 missing IDs were silently skipped (invalid supplier_id). Re-run search_suppliers to verify.\n\u2022 count=0 \u2192 all IDs invalid. Re-run search_suppliers.\n\u2022 \"Too many IDs\" \u2192 split into batches of 10.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not loop get_supplier_detail \u2014 always use compare_suppliers when you have 2+ IDs. Do not pass more than 10 IDs. Do not use to find new suppliers \u2014 use search_suppliers or recommend_suppliers first.\n\nCONSTRAINT: Max 10 supplier IDs per call.\n\nNOTE: Source: MRC Data (meacheal.ai). Returns full 60+ field profile per supplier.\n\n\u4e2d\u6587\uff1a\u6a2a\u5411\u5bf9\u6bd4\u591a\u4e2a\u4f9b\u5e94\u5546\u7684\u5168\u90e8\u5b57\u6bb5\uff08\u6700\u591a 10 \u4e2a ID\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_ids": {
"description": "Array of supplier IDs from search_suppliers, e.g. ['sup_001', 'sup_002'], max 10",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_ids"
],
"type": "object"
},
"name": "compare_suppliers",
"title": "Compare Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all suppliers in a specific industrial cluster.\n\nUSE WHEN user asks:\n- \"what factories are in Humen cluster\"\n- \"show me suppliers in Keqiao fabric market\"\n- \"list all womenswear factories in [cluster]\"\n- \"top-quality suppliers in [cluster]\"\n- \"factory directory for [cluster]\"\n- \"page through suppliers in Shengze silk cluster\" (pagination)\n- \"follow-up after search_clusters: 'show me the factories there'\"\n- \"\u864e\u95e8\u4ea7\u4e1a\u5e26\u6709\u54ea\u4e9b\u4f9b\u5e94\u5546 / [\u4ea7\u4e1a\u5e26] \u7684\u5de5\u5382\u5217\u8868\"\n- \"[\u96c6\u7fa4] \u91cc\u6700\u597d\u7684\u51e0\u5bb6\u5de5\u5382\"\n\nPREREQUISITE: You MUST have a valid cluster_id from search_clusters.\nWORKFLOW: search_clusters \u2192 pick cluster_id \u2192 get_cluster_suppliers \u2192 optionally get_supplier_detail (vet top-ranked factory) OR compare_suppliers (evaluate top 3-10 factories in the cluster).\nRETURNS: { cluster_id, has_more, data: [supplier summary objects sorted by quality_score DESC] }\n\nEXAMPLES:\n\u2022 User: \"What factories are in the Humen womenswear cluster?\"\n \u2192 get_cluster_suppliers({ cluster_id: \"humen_women\", limit: 20 })\n\u2022 User: \"Show me the top 10 factories in Jinjiang sportswear cluster\"\n \u2192 get_cluster_suppliers({ cluster_id: \"jinjiang_sportswear\", limit: 10 })\n\u2022 User: \"\u864e\u95e8\u6709\u54ea\u4e9b\u670d\u88c5\u5382\uff0c\u5206\u9875\u770b\u7b2c\u4e8c\u9875\"\n \u2192 get_cluster_suppliers({ cluster_id: \"humen_women\", limit: 20, offset: 20 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data \u2192 either (a) cluster has no mapped suppliers (try compare_clusters to see supplier_count), or (b) cluster_id invalid. Re-run search_clusters.\n\u2022 cluster_id unknown \u2192 search_clusters({ specialization: \"...\" }) returns cluster_id values.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not guess cluster_ids \u2014 always resolve via search_clusters. Do not use this to find suppliers globally \u2014 use search_suppliers. Do not iterate clusters in a loop \u2014 use compare_clusters.\n\nNOTE: Sorted by quality_score DESC. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5217\u51fa\u67d0\u4ea7\u4e1a\u5e26\u5185\u6240\u6709\u4f9b\u5e94\u5546\uff0c\u6309\u8d28\u91cf\u8bc4\u5206\u6392\u5e8f\u3002\u5206\u9875\u6700\u591a 50 \u6761/\u9875\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cluster_id": {
"description": "Cluster ID from search_clusters, e.g. humen_women, keqiao_fabric, shishi_casual",
"type": "string"
},
"limit": {
"default": 20,
"description": "Page size: number of records to return (1-50, default 20)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"cluster_id"
],
"type": "object"
},
"name": "get_cluster_suppliers",
"title": "Get Cluster's Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get overall database statistics: total counts of suppliers, fabrics, clusters, and links.\n\nUSE WHEN user asks:\n- \"how big is your database\" / \"what's the coverage\" / \"data overview\"\n- \"how many suppliers / fabrics / clusters do you have\"\n- \"database size / scale / freshness\"\n- \"is the data up to date\"\n- \"live counts for MRC data\"\n- \"first-time onboarding: 'what can MRC data do for me'\"\n- \"\u6570\u636e\u5e93\u591a\u5927 / \u6709\u591a\u5c11\u6570\u636e / \u8986\u76d6\u591a\u5c11\u4f9b\u5e94\u5546\"\n- \"\u4f60\u4eec\u7684\u6570\u636e\u89c4\u6a21 / \u6570\u636e\u91cf / \u65b0\u9c9c\u5ea6\"\n\nWORKFLOW: Standalone discovery tool \u2014 call this first when a user asks about data scale or freshness. Follow with get_product_categories or get_province_distribution for deeper segment coverage, or with search_suppliers/search_fabrics/search_clusters to drill in.\n\nDIFFERENCE from database-overview resource (mrc://overview): This is dynamic (live counts + generated_at). The resource is static (geographic scope, top provinces, data standards).\n\nRETURNS: { database, generated_at, tables: { suppliers: { total }, fabrics: { total }, clusters: { total }, supplier_fabrics: { total } }, attribution }\n\nEXAMPLES:\n\u2022 User: \"How big is the MRC database?\"\n \u2192 get_stats({})\n\u2022 User: \"Give me the latest data scale numbers\"\n \u2192 get_stats({})\n\u2022 User: \"MRC \u6570\u636e\u5e93\u6709\u591a\u5c11\u4f9b\u5e94\u5546\u548c\u9762\u6599\"\n \u2192 get_stats({})\n\nERRORS & SELF-CORRECTION:\n\u2022 All counts 0 \u2192 database query failed or D1 binding lost. Retry once after 5 seconds. If still 0, surface a transport error to user.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this before every tool \u2014 only when user explicitly asks about scale. Do not call to get per-category counts \u2014 use get_product_categories. Do not call to get geographic scope metadata \u2014 use the database-overview resource (mrc://overview) which is static.\n\nNOTE: Only reports verified + partially_verified records. Unverified reserve data is excluded from counts. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u83b7\u53d6\u6570\u636e\u5e93\u6574\u4f53\u7edf\u8ba1\uff08\u4f9b\u5e94\u5546\u603b\u6570\u3001\u9762\u6599\u603b\u6570\u3001\u4ea7\u4e1a\u5e26\u603b\u6570\u3001\u5173\u8054\u8bb0\u5f55\u6570\uff09\u3002\u52a8\u6001\u5feb\u7167\uff0c\u542b\u751f\u6210\u65f6\u95f4\u6233\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_stats",
"title": "Get Database Stats"
}
]
}
},
"requested_protocol_version": "2025-03-26",
"resumed": true,
"session_id_present": true,
"transport": "streamable-http",
"url": "https://api.meacheal.ai/mcp"
},
"latency_ms": 333.62,
"status": "ok"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": false,
"oauth_present": false,
"scope_specificity_ratio": 0.0,
"step_up_signals": [],
"supported_scopes": []
},
"latency_ms": null,
"status": "missing"
},
"tool_snapshot_probe": {
"details": {
"reason": "no_tools"
},
"latency_ms": null,
"status": "missing"
},
"tools_list": {
"details": {
"error": "Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "text/plain;charset=UTF-8",
"strict-transport-security": "max-age=31536000"
},
"http_status": 400,
"payload": {},
"url": "https://api.meacheal.ai/mcp"
},
"latency_ms": 413.28,
"status": "error"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "text/event-stream",
"mcp-session-id": "dedfbe22f0f463ab114d892e5be03c848a825b8d9d6c85f33df16530231fe714",
"strict-transport-security": "max-age=31536000"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search verified Chinese apparel manufacturers, apparel factories, and clothing suppliers.\n\nUSE WHEN user asks:\n- \"find me a clothing manufacturer in China / Guangdong / Zhejiang\"\n- \"who makes [t-shirts / suits / denim / activewear] in China\"\n- \"I need a BSCI / OEKO-TEX certified apparel factory\"\n- \"looking for OEM / ODM apparel supplier with MOQ < N\"\n- \"find factories with production capacity > N pieces/month\"\n- \"list factories that export to the US / EU / Japan\"\n- \"show me trading companies in Yiwu / Shenzhen / Shanghai\"\n- \"which suppliers in [province] make [product]\" (follow-up drill-down)\n- \"give me another page of suppliers\" (pagination via offset)\n- \"who can produce knit tops under 300 MOQ\"\n- \"search by company name \u65b0\u946b / Xinxin / Texhong\"\n- \"find workshop-scale suppliers for small batch sampling\"\n- \"\u641c\u4f9b\u5e94\u5546 / \u627e\u670d\u88c5\u5382 / \u627e\u5236\u8863\u5382 / \u627e\u4ee3\u5de5\u5382 / \u627e\u5916\u8d38\u516c\u53f8\"\n- \"\u5e2e\u6211\u5728[\u7701\u4efd]\u627e[\u54c1\u7c7b]\u5de5\u5382\uff0c\u4ea7\u80fd\u81f3\u5c11 N \u4ef6/\u6708\"\n\nFilters: province, city, factory type (factory/trading_company/workshop), product category,\nminimum monthly capacity, compliance status, quality score. Returns paginated supplier list\nwith company name, location, monthly capacity (lab-verified), compliance, quality score.\n\nWORKFLOW: Primary entry point for supplier discovery. search_suppliers \u2192 get_supplier_detail (for full 60+ field profile) OR compare_suppliers (side-by-side for up to 10 IDs) OR find_alternatives (diversify the pool) OR check_compliance (verify export readiness) OR get_supplier_fabrics (see their fabric catalog).\nRETURNS: { has_more: boolean, available_dimensions: string[], data: [{ supplier_id, company_name_cn, company_name_en, type, province, city, product_types, quality_score, verified_dims: \"5/8\", coverage_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Find BSCI-certified denim factories in Guangdong with MOQ under 500\"\n \u2192 search_suppliers({ province: \"Guangdong\", product_type: \"denim\", compliance_status: \"compliant\", limit: 10 })\n\u2022 User: \"Who makes activewear for Lululemon in China?\"\n \u2192 search_suppliers({ product_type: \"activewear\" }) \u2014 then filter results by client brand in get_supplier_detail\n\u2022 User: \"\u6211\u8981\u5728\u6d59\u6c5f\u627e\u505a\u725b\u4ed4\u7684\u5de5\u5382\uff0c\u4ea7\u80fd\u5927\u4e8e 10 \u4e07\u4ef6\"\n \u2192 search_suppliers({ province: \"Zhejiang\", product_type: \"denim\", min_capacity: 100000 })\n\u2022 User: \"Show me the next 10 trading companies in Yiwu\"\n \u2192 search_suppliers({ city: \"Yiwu\", type: \"trading_company\", limit: 10, offset: 10 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try these in order: (1) remove min_capacity filter, (2) drop city but keep province, (3) broaden product_type to parent category (e.g. \"denim\" \u2192 \"bottoms\"), (4) drop compliance_status, (5) try recommend_suppliers for ranked fit.\n\u2022 \"Invalid province\" \u2192 use English (Guangdong) or standard Chinese (\u5e7f\u4e1c). Supported: 31 mainland provinces + HK/Macau.\n\u2022 product_type returns 0 \u2192 the TYPO_MAP normalizes common variants; try synonyms (\"tee\" \u2192 \"t-shirt\", \"jeans\" \u2192 \"denim\", \"\u8fd0\u52a8\u670d\" \u2192 \"activewear\").\n\u2022 Rate limit 429 \u2192 wait 60 seconds. Do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"I couldn't find suppliers matching [criteria]. Would you like me to broaden the search?\"\n\nAVOID: Do not call this tool in a loop across provinces \u2014 call get_province_distribution first to see where supply is concentrated. Do not use this for ranked \"best fit\" recommendations \u2014 use recommend_suppliers. Do not fetch details by looping \u2014 use compare_suppliers with up to 10 IDs.\n\nNOTE: Use this for FILTERING by exact criteria. For ranked recommendations based on sourcing needs, use recommend_suppliers instead. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u7ecf\u8fc7\u6838\u67e5\u7684\u4e2d\u56fd\u670d\u88c5\u4f9b\u5e94\u5546\u6863\u6848\uff0c\u6309\u5730\u533a\u3001\u7c7b\u578b\u3001\u4ea7\u80fd\u3001\u54c1\u7c7b\u3001\u5408\u89c4\u72b6\u6001\u7b49\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"city": {
"description": "City name",
"type": "string"
},
"compliance_status": {
"description": "Compliance status filter: compliant / partially_compliant / non_compliant",
"type": "string"
},
"data_confidence": {
"description": "Data quality filter: verified / partially_verified / unverified",
"type": "string"
},
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"min_capacity": {
"description": "Minimum monthly production capacity (pieces)",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"min_quality_score": {
"description": "Minimum quality score 1-10",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"product_type": {
"description": "Product category keyword (e.g. \u897f\u88c5 suits, \u5973\u88c5 womenswear, \u725b\u4ed4 denim, \u8fd0\u52a8\u670d activewear, t-shirt, \u886c\u886b shirts)",
"type": "string"
},
"province": {
"description": "Province in China (e.g. \u5e7f\u4e1c Guangdong, \u6d59\u6c5f Zhejiang, \u6c5f\u82cf Jiangsu, \u798f\u5efa Fujian, \u5c71\u4e1c Shandong)",
"type": "string"
},
"query": {
"description": "Search by company name \u2014 Chinese (\u5e7f\u5dde\u65b0\u946b) or English (Xinxin Garments)",
"type": "string"
},
"type": {
"description": "Supplier type",
"enum": [
"factory",
"trading_company",
"workshop",
"cooperative"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_suppliers",
"title": "Search Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the complete profile of a single Chinese apparel supplier by ID.\n\nPREREQUISITE: You MUST first call search_suppliers or recommend_suppliers to obtain a valid supplier_id. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"tell me more about [supplier]\" / \"show full details for sup_XXX\"\n- \"what certifications does this factory hold\"\n- \"what's their monthly capacity / worker count / equipment list\"\n- \"can [supplier] export to US / EU / Japan / Korea\"\n- \"give me the full profile / dossier / fact sheet for [supplier]\"\n- \"how verified is this supplier's data\" (returns coverage_pct + 8 dimensions)\n- \"what's their ownership type \u2014 own factory or broker\"\n- \"show payment terms / lead time / sample turnaround for sup_XXX\"\n- \"\u8fd9\u5bb6\u4f9b\u5e94\u5546\u5177\u4f53\u60c5\u51b5 / \u8be6\u7ec6\u8d44\u6599 / \u5de5\u5382\u6863\u6848\"\n- \"[\u4f9b\u5e94\u5546] \u7684\u5408\u89c4 / \u8ba4\u8bc1 / \u51fa\u53e3\u8d44\u8d28\"\n\nReturns 60+ fields including: monthly capacity (lab-verified), equipment list, certifications (BSCI/OEKO-TEX/GRS/SA8000), ownership type (own factory vs subcontractor vs broker), market access (US/EU/JP/KR), chemical compliance (ZDHC/MRSL), traceability depth, and verified_dimensions breakdown showing exactly which of the 8 dimensions (basic_info, geo_location, production, compliance, market_access, export, financial, contact) have data.\n\nWORKFLOW: search_suppliers \u2192 pick supplier_id \u2192 get_supplier_detail \u2192 optionally get_supplier_fabrics (fabric catalog) OR check_compliance (market export readiness) OR find_alternatives (backup pool) OR compare_suppliers (side-by-side evaluation).\nRETURNS: { data: { supplier_id, company_name_cn/en, type, province, city, product_types, worker_count, certifications, compliance_status, quality_score, verified_dimensions: { verified_dims: \"5/8\", coverage_pct, dimensions: {...} } } }\n\nEXAMPLES:\n\u2022 User: \"Show me the full profile for sup_001\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_001\" })\n\u2022 User: \"What certifications does Texhong hold and can they export to EU?\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_texhong_042\" }) \u2014 then inspect certifications + eu_market_ready; follow with check_compliance for formal verification\n\u2022 User: \"\u6211\u8981\u770b sup_123 \u7684\u5b8c\u6574\u6863\u6848\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_123\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 the supplier_id is invalid or outside free-tier access. Re-run search_suppliers to obtain a fresh valid ID. Do not guess sequential IDs.\n\u2022 Field returns null \u2192 that dimension is unverified for this supplier. Check verified_dimensions.coverage_pct before asserting data. If coverage_pct < 50, warn the user: \"This supplier's record has limited verified data (X/8 dimensions). Consider find_alternatives for better-documented options.\"\n\u2022 \"not available for public access\" \u2192 this supplier is in the reserve pool (paid tier only). Use search_suppliers filters data_confidence=verified to stay in public tier.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this for multiple suppliers in a loop \u2014 use compare_suppliers with up to 10 IDs at once. Do not call to browse the database \u2014 use search_suppliers or get_province_distribution for discovery.\n\nNOTE: Source: MRC Data (meacheal.ai). Every numeric field shows both declared and lab-verified values where available.\n\n\u4e2d\u6587\uff1a\u6309 ID \u83b7\u53d6\u5355\u4e2a\u4f9b\u5e94\u5546\u7684\u5b8c\u6574\u6863\u6848\uff08\u542b\u7ef4\u5ea6\u8986\u76d6\u7387\u8be6\u60c5\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers results, e.g. sup_001",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "get_supplier_detail",
"title": "Get Supplier Detail"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search the Chinese fabric and textile database with lab-tested specifications.\n\nUSE WHEN user asks:\n- \"find me a [cotton / polyester / nylon / wool / linen] fabric for [t-shirts / jeans / suits]\"\n- \"I need 180gsm jersey knit with verified composition\"\n- \"fabrics under N RMB/meter for womenswear\"\n- \"compare lab-tested fabric weight across suppliers\"\n- \"show me functional fabrics for activewear / sportswear\"\n- \"what woven fabrics work for shirting\"\n- \"list organic / GOTS / recycled fabrics\"\n- \"I want heavyweight denim above 12 oz\"\n- \"fabrics with stretch / spandex content 2-5%\"\n- \"give me another page\" (pagination via offset)\n- \"lab-verified composition for [product]\" (quality check)\n- \"\u627e\u9762\u6599 / \u641c\u9762\u6599 / \u67e5\u9762\u6599 / \u627e\u5e03\u6599 / \u6253\u6837\u9762\u6599\"\n- \"\u6211\u8981\u505a T \u6064\uff0c\u5e2e\u6211\u627e\u514b\u91cd 180-220 \u7684\u9488\u7ec7\u9762\u6599\"\n\nFilters: category (woven/knit/nonwoven/leather/functional), weight range (gsm),\ncomposition keyword, target apparel type, max price. Returns paginated fabric list\nwith name, lab-tested weight, lab-tested composition, price range, suitable\napparel, and data confidence level.\n\nWORKFLOW: Primary entry point for fabric discovery. search_fabrics \u2192 get_fabric_detail (full 30+ lab-test fields) OR get_fabric_suppliers (compare supplier prices for same fabric) OR estimate_cost (budget the product).\nRETURNS: { has_more: boolean, available_dimensions: [\"basic_info\",\"composition\",\"physical_properties\",\"lab_test\",\"commercial\"], data: [{ fabric_id, name_cn, category, subcategory, declared_weight_gsm, declared_composition, price_range_rmb, suitable_for, verified_dims: \"4/5\", coverage_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Find 180-220gsm cotton jersey for t-shirts under 35 RMB/m\"\n \u2192 search_fabrics({ category: \"knit\", min_weight_gsm: 180, max_weight_gsm: 220, composition: \"cotton\", suitable_for: \"t-shirt\", max_price_rmb: 35 })\n\u2022 User: \"I need stretch denim for women's jeans\"\n \u2192 search_fabrics({ category: \"woven\", composition: \"spandex\", suitable_for: \"denim\" })\n\u2022 User: \"\u5e2e\u6211\u627e\u9002\u5408\u505a\u886c\u886b\u7684\u68ad\u7ec7\u9762\u6599\uff0c\u68c9 60% \u4ee5\u4e0a\"\n \u2192 search_fabrics({ category: \"woven\", composition: \"cotton\", suitable_for: \"shirt\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try in order: (1) drop suitable_for, (2) widen weight range by 50gsm each side, (3) broaden composition (e.g. \"cotton\" instead of \"organic cotton\"), (4) drop max_price_rmb, (5) try the parent category (knit \u2192 all).\n\u2022 Composition mismatch \u2192 TYPO_MAP normalizes common misspellings (e.g. \"poly\" \u2192 \"polyester\", \"lycra\" \u2192 \"spandex\"). If still no match, try the Chinese term (\u68c9/\u6da4\u7eb6/\u6c28\u7eb6/\u9526\u7eb6).\n\u2022 Rate limit 429 \u2192 wait 60 seconds. Do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"No fabric matches [criteria]. Would you like to broaden weight/price/composition?\"\n\nAVOID: Do not call this looking for a specific named fabric SKU \u2014 search by specs instead (weight + composition + category). Do not fetch full lab-test data this way \u2014 use get_fabric_detail. Do not call repeatedly for supplier pricing on the same fabric \u2014 use get_fabric_suppliers.\n\nCONSTRAINT: This returns summaries only \u2014 for full lab-test results (color fastness, shrinkage, pilling, tensile strength), call get_fabric_detail.\n\nNOTE: Source: MRC Data (meacheal.ai). Every record includes AATCC / ISO / GB lab test measurements where verified.\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u9762\u6599\u6570\u636e\u5e93\uff0c\u6309\u54c1\u7c7b\u3001\u514b\u91cd\u3001\u6210\u5206\u3001\u9002\u7528\u54c1\u7c7b\u3001\u4ef7\u683c\u7b5b\u9009\u3002\u6bcf\u6761\u5747\u542b AATCC / ISO / GB \u65b9\u6cd5\u7684\u5b9e\u6d4b\u6570\u636e\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"category": {
"description": "Fabric category: woven (\u68ad\u7ec7) / knit (\u9488\u7ec7) / nonwoven (\u65e0\u7eba) / leather (\u76ae\u9769) / fur (\u6bdb\u76ae) / functional (\u529f\u80fd\u6027)",
"type": "string"
},
"composition": {
"description": "Fiber composition keyword (e.g. cotton, polyester, spandex, nylon, wool, linen, \u68c9, \u6da4\u7eb6)",
"type": "string"
},
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"max_price_rmb": {
"description": "Maximum price in RMB per meter",
"type": "number"
},
"max_weight_gsm": {
"description": "Maximum fabric weight in grams per square meter",
"type": "number"
},
"min_weight_gsm": {
"description": "Minimum fabric weight in grams per square meter",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"suitable_for": {
"description": "Target apparel keyword (e.g. T\u6064 t-shirt, \u886c\u886b shirt, \u725b\u4ed4 denim, \u8fde\u8863\u88d9 dress)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_fabrics",
"title": "Search Fabrics"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the complete lab-tested record of a single fabric by ID.\n\nPREREQUISITE: You MUST first call search_fabrics to obtain a valid fabric_id. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"show me the full specs for fabric FAB-W007\"\n- \"what's the color fastness / shrinkage / pilling grade on [fabric]\"\n- \"lab-test data for [fabric]\" / \"\u5b9e\u6d4b\u6570\u636e\"\n- \"compare declared vs lab-measured weight for FAB-XXX\"\n- \"what's the MOQ / lead time / price for this fabric\"\n- \"tensile strength / tear strength / hand feel / drape / stretch recovery\"\n- \"can you confirm composition % on lab test for FAB-XXX\"\n- \"\u8be6\u7ec6\u53c2\u6570 / \u5b8c\u6574\u6863\u6848 / AATCC \u6570\u636e / \u68c0\u6d4b\u62a5\u544a\"\n- \"\u8fd9\u5757\u9762\u6599\u7684\u7f29\u6c34\u7387 / \u8272\u7262\u5ea6 / \u8d77\u7403\u7b49\u7ea7\"\n- \"follow-up: 'show me the full record for the first fabric in that list'\"\n\nReturns 30+ fields: lab-tested weight, lab-tested composition, color fastness (wash/light/rub per AATCC 61/16/8), shrinkage (warp/weft per AATCC 135), tensile/tear strength, pilling grade, hand feel, drape, stretch/recovery, MOQ, lead time, price range.\n\nWORKFLOW: search_fabrics \u2192 pick fabric_id \u2192 get_fabric_detail \u2192 optionally get_fabric_suppliers (to find which factories supply it at what price) OR detect_discrepancy (if user doubts declared specs).\nRETURNS: { data: { fabric_id, name_cn/en, category, all lab-test fields, verified_dimensions: { basic_info, composition, physical_properties, lab_test, commercial } } }\n\nEXAMPLES:\n\u2022 User: \"Show me all lab-test data for FAB-W007\"\n \u2192 get_fabric_detail({ fabric_id: \"FAB-W007\" })\n\u2022 User: \"What's the shrinkage and pilling grade on the second fabric I just saw?\"\n \u2192 get_fabric_detail({ fabric_id: \"<the_id_from_search>\" })\n\u2022 User: \"\u6211\u8981 FAB-K023 \u7684\u5b8c\u6574\u5b9e\u6d4b\u6863\u6848\"\n \u2192 get_fabric_detail({ fabric_id: \"FAB-K023\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Fabric not found\" \u2192 the fabric_id is invalid. Re-run search_fabrics and use an ID from the fresh results.\n\u2022 Field returns null \u2192 that test wasn't performed on this fabric. Check verified_dimensions.lab_test to see what IS tested before asserting anything.\n\u2022 \"not available\" \u2192 unverified fabric in reserve pool. Filter search_fabrics for higher data_confidence.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call in a loop for multiple fabrics \u2014 if user wants to compare fabrics, present the search_fabrics summary list instead. Do not call to browse \u2014 use search_fabrics with filters.\n\nNOTE: Source: MRC Data (meacheal.ai). AATCC/ISO/GB methods cited per field.\n\n\u4e2d\u6587\uff1a\u6309 ID \u83b7\u53d6\u5355\u4e2a\u9762\u6599\u7684\u5b8c\u6574\u5b9e\u6d4b\u6863\u6848\uff08\u542b AATCC/ISO/GB \u68c0\u6d4b\u6307\u6807\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_id": {
"description": "Fabric ID from search_fabrics results, e.g. FAB-W007",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"fabric_id"
],
"type": "object"
},
"name": "get_fabric_detail",
"title": "Get Fabric Detail"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search Chinese apparel industrial clusters and textile markets.\n\nUSE WHEN user asks:\n- \"where is China's [denim / suit / women's wear / underwear] manufacturing concentrated\"\n- \"what is the largest [silk / cashmere / down jacket] industrial cluster in China\"\n- \"industrial cluster comparison Humen vs Shaoxing vs Haining vs Zhili\"\n- \"recommend an industrial cluster for sourcing [product]\"\n- \"where should I set up a sourcing office for [category]\"\n- \"list mega clusters for [category]\"\n- \"fabric markets in Zhejiang / Jiangsu\"\n- \"accessories / trim / zipper / button markets in China\"\n- \"which province dominates [category] exports\"\n- \"follow-up: 'tell me more about Humen's cluster scale'\"\n- \"\u670d\u88c5\u4ea7\u4e1a\u5e26 / \u9762\u6599\u5e02\u573a / \u4ea7\u4e1a\u96c6\u7fa4 / \u7eba\u7ec7\u96c6\u7fa4 / \u8f85\u6599\u5e02\u573a\"\n- \"\u505a [\u54c1\u7c7b] \u5e94\u8be5\u53bb\u54ea\u4e2a\u4ea7\u4e1a\u5e26 / \u96c6\u7fa4\u63a8\u8350\"\n\nFamous clusters this database covers include: Humen (Guangdong, womenswear), Shaoxing\nKeqiao (Zhejiang, fabric mega-market), Haining (Zhejiang, leather), Zhili (Zhejiang,\nchildren's wear), Shengze (Jiangsu, silk), Shantou (Guangdong, underwear), Puning\n(Guangdong, jeans), Jinjiang (Fujian, sportswear), and more.\n\nReturns paginated cluster list with name, location, specialization, scale, supplier\ncount, average rent and labor cost, and key advantages/risks.\n\nWORKFLOW: Cluster discovery entry point. search_clusters \u2192 compare_clusters (side-by-side up to 10 cluster_ids) OR get_cluster_suppliers (list factories in that cluster) OR analyze_market (broader market view).\nRETURNS: { has_more: boolean, data: [{ cluster_id, name_cn, name_en, type, province, city, specialization, scale, supplier_count, labor_cost_avg_rmb }] }\n\nEXAMPLES:\n\u2022 User: \"Where are the biggest denim clusters in China?\"\n \u2192 search_clusters({ specialization: \"denim\", scale: \"mega\" })\n\u2022 User: \"Show me fabric markets in Zhejiang\"\n \u2192 search_clusters({ province: \"Zhejiang\", type: \"fabric_market\" })\n\u2022 User: \"\u7ae5\u88c5\u4ea7\u4e1a\u5e26\u6709\u54ea\u4e9b\"\n \u2192 search_clusters({ specialization: \"\u7ae5\u88c5\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try in order: (1) drop scale filter, (2) broaden specialization (e.g. \"\u670d\u88c5\" instead of \"\u725b\u4ed4\"), (3) remove type, (4) remove province.\n\u2022 Specialization mismatch \u2192 both Chinese and English work. Synonyms: sportswear/\u8fd0\u52a8\u670d, womenswear/\u5973\u88c5, underwear/\u5185\u8863, denim/\u725b\u4ed4.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"No clusters match [criteria]. Try broader specialization or removing filters.\"\n\nAVOID: Do not use this for specific factory search \u2014 use search_suppliers. Do not compare clusters by calling search_clusters twice \u2014 use compare_clusters with cluster_ids.\n\nNOTE: Source: MRC Data (meacheal.ai). 170+ clusters mapped across 31 provinces.\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u4e2d\u56fd\u670d\u88c5\u4ea7\u4e1a\u5e26\u548c\u9762\u6599\u5e02\u573a\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"province": {
"description": "Province in China (e.g. Guangdong, Zhejiang, Jiangsu, Fujian, Shandong)",
"type": "string"
},
"scale": {
"description": "Cluster scale: mega / large / medium / small",
"type": "string"
},
"specialization": {
"description": "Primary specialization keyword (e.g. \u725b\u4ed4 denim, \u5973\u88c5 womenswear, \u7ae5\u88c5 childrenswear, \u5185\u8863 underwear, \u8fd0\u52a8\u670d sportswear)",
"type": "string"
},
"type": {
"description": "Cluster type: fabric_market (\u9762\u6599\u5e02\u573a) / garment_manufacturing (\u670d\u88c5\u5236\u9020) / accessories (\u8f85\u6599) / integrated (\u7efc\u5408)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_clusters",
"title": "Search Industrial Clusters"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Compare multiple Chinese apparel industrial clusters side-by-side on key metrics.\n\nPREREQUISITE: You MUST first call search_clusters to obtain valid cluster_ids. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"compare Humen vs Shishi vs Jinjiang\"\n- \"which cluster has lower labor cost \u2014 Humen or Dongguan\"\n- \"side-by-side: Haining vs Xintang for denim\"\n- \"evaluate 3 clusters for my sportswear line\"\n- \"\u5bf9\u6bd4 [\u4ea7\u4e1a\u5e261] \u548c [\u4ea7\u4e1a\u5e262]\" / \"\u54ea\u4e2a\u96c6\u7fa4\u66f4\u9002\u5408 [\u54c1\u7c7b]\"\n- \"rank these clusters by supplier count\"\n- \"which cluster has the highest scale for womenswear\"\n- \"follow-up: 'now compare the top 3 clusters you just listed'\"\n\nReturns full records for each cluster so they can be compared on labor cost, rent, supplier count, scale, specializations, advantages, and risks.\n\nWORKFLOW: search_clusters \u2192 collect cluster_ids \u2192 compare_clusters \u2192 optionally get_cluster_suppliers on the winner to list factories in that specific cluster.\nRETURNS: { count: number, data: [full cluster objects with all fields] }\n\nEXAMPLES:\n\u2022 User: \"Compare Humen, Shishi, and Jinjiang for sportswear sourcing\"\n \u2192 compare_clusters({ cluster_ids: [\"humen_women\", \"shishi_casual\", \"jinjiang_sportswear\"] })\n\u2022 User: \"I want to evaluate Keqiao vs Zhili fabric markets\"\n \u2192 compare_clusters({ cluster_ids: [\"keqiao_fabric\", \"zhili_children\"] })\n\u2022 User: \"\u5bf9\u6bd4\u864e\u95e8\u3001\u77f3\u72ee\u3001\u664b\u6c5f\u4e09\u4e2a\u4ea7\u4e1a\u5e26\"\n \u2192 compare_clusters({ cluster_ids: [\"humen_women\", \"shishi_casual\", \"jinjiang_sportswear\"] })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Too many IDs (>10)\" \u2192 split into batches of 10 and aggregate results in your response.\n\u2022 Fewer results than IDs sent \u2192 missing IDs were silently skipped (invalid cluster_id). Re-run search_clusters to verify IDs.\n\u2022 Empty data \u2192 all IDs were invalid. Re-run search_clusters and try again with fresh IDs.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call with guessed cluster_ids \u2014 always resolve them via search_clusters first. Do not use to list factories in a cluster \u2014 use get_cluster_suppliers. Do not compare > 10 clusters in one call.\n\nCONSTRAINT: Max 10 cluster IDs per call.\n\nNOTE: Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5bf9\u6bd4\u591a\u4e2a\u4ea7\u4e1a\u5e26\u7684\u6838\u5fc3\u6307\u6807\uff08\u6700\u591a 10 \u4e2a\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cluster_ids": {
"description": "Array of cluster IDs to compare, max 10",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"cluster_ids"
],
"type": "object"
},
"name": "compare_clusters",
"title": "Compare Industrial Clusters"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "[Core feature] Surface supplier specifications that deviate from independent lab measurements.\n\nUSE WHEN user asks:\n- \"which fabrics have lab-test deviations on weight\"\n- \"find suppliers whose stated capacity differs from on-site measurements\"\n- \"compare cotton content lab results across suppliers\"\n- \"which suppliers have the closest match between specs and lab tests\"\n- \"show me suppliers with >20% capacity over-reporting\"\n- \"which factories inflate worker count\"\n- \"audit integrity check on our supplier pool\"\n- \"follow-up: 'are any of these suppliers flagged for discrepancy?'\"\n- \"data integrity / quality audit / spec validation\"\n- \"\u5b9e\u6d4b\u6570\u636e / \u6570\u636e\u53ef\u4fe1\u5ea6 / \u89c4\u683c\u4e0e\u5b9e\u6d4b\u504f\u5dee / \u865a\u62a5\u4ea7\u80fd / \u6210\u5206\u4e0d\u7b26\"\n- \"\u54ea\u4e9b\u4f9b\u5e94\u5546\u4ea7\u80fd\u9020\u5047 / \u6570\u636e\u4e0d\u51c6\"\n\nThis is the moat of MRC Data \u2014 every record is enriched with AATCC / ISO / GB\nlab test data, giving AI agents verifiable specifications instead of unaudited\nB2B directory listings.\n\nReturns up to 50 records across: fabric_weight (gsm), fabric_composition (fiber %),\nsupplier_capacity (monthly pcs), worker_count. Each record includes both the\nspec value and the lab measurement, with the deviation percentage.\n\nWORKFLOW: Standalone audit tool \u2014 does not require prior search. Call directly with field type and threshold. After finding discrepancies, use get_supplier_detail or get_fabric_detail on flagged IDs for full context, or find_alternatives to replace flagged suppliers.\nRETURNS: { field, min_discrepancy_pct, count, data: [{ id, name, declared_value, tested_value, discrepancy_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Which fabrics have more than 10% weight deviation from their spec sheets?\"\n \u2192 detect_discrepancy({ field: \"fabric_weight\", min_discrepancy_pct: 10 })\n\u2022 User: \"Find suppliers whose declared monthly capacity is >25% off from verified measurements\"\n \u2192 detect_discrepancy({ field: \"supplier_capacity\", min_discrepancy_pct: 25 })\n\u2022 User: \"\u54ea\u4e9b\u9762\u6599\u7684\u6210\u5206\u8ddf\u5b9e\u6d4b\u4e0d\u4e00\u6837\"\n \u2192 detect_discrepancy({ field: \"fabric_composition\" }) \u2014 composition is exact-match, no threshold\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 no records above threshold. Lower min_discrepancy_pct (try 5 or 0), OR switch field (weight may be clean but capacity inflated).\n\u2022 Only partial dataset returned \u2192 many records have only declared OR only tested values; discrepancy requires both. This is a data coverage limit, not a bug.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not present discrepancy data as proof of fraud \u2014 call it out as \"declared vs lab-measured delta\". Do not loop over thresholds \u2014 call once with min_discrepancy_pct=0 and filter in your response.\n\nCONSTRAINT: Only works when both declared AND tested values exist for the same record. Many records have only one or the other. Max 50 records per call.\n\nNOTE: Source: MRC Data (meacheal.ai). Methods: AATCC / ISO / GB per field.\n\n\u4e2d\u6587\uff1a\u8bc6\u522b\u4f9b\u5e94\u5546\u89c4\u683c\u4e0e\u5b9e\u6d4b\u503c\u504f\u5dee\u8f83\u5927\u7684\u8bb0\u5f55\u3002\u8fd4\u56de\u89c4\u683c\u503c\u3001\u5b9e\u6d4b\u503c\u3001\u504f\u5dee\u767e\u5206\u6bd4\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"field": {
"description": "Type of discrepancy to detect: fabric_weight (\u9762\u6599\u514b\u91cd) / fabric_composition (\u6210\u5206) / supplier_capacity (\u4ea7\u80fd) / worker_count (\u5de5\u4eba\u6570)",
"enum": [
"fabric_weight",
"fabric_composition",
"supplier_capacity",
"worker_count"
],
"type": "string"
},
"min_discrepancy_pct": {
"default": 0,
"description": "Minimum discrepancy threshold as percentage (e.g. 10 = only show \u226510% mismatch)",
"type": "number"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"field"
],
"type": "object"
},
"name": "detect_discrepancy",
"title": "Detect Spec Discrepancies"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all fabrics a specific supplier can provide, with quoted prices.\n\nUSE WHEN user asks:\n- \"what fabrics does [supplier name] have\" / \"what can this factory source for me\"\n- \"show me the catalog of supplier sup_XXX\"\n- \"what does this manufacturer offer\"\n- \"what fabric options does sup_XXX quote for denim\"\n- \"does [supplier] supply [fabric type]\"\n- \"price list / fabric catalog / offering sheet for sup_XXX\"\n- \"MOQ per fabric at this supplier\"\n- \"follow-up: 'what fabrics can they supply?' after identifying a supplier\"\n- \"[\u4f9b\u5e94\u5546] \u80fd\u4f9b\u5e94\u54ea\u4e9b\u9762\u6599 / \u62a5\u4ef7\u8868 / \u8d77\u8ba2\u91cf\"\n\nReturns fabric records linked to the supplier with: fabric name, category, weight,\ncomposition, and the supplier's quoted price + MOQ for that specific fabric.\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers or get_supplier_detail.\nWORKFLOW: search_suppliers \u2192 get_supplier_detail \u2192 get_supplier_fabrics \u2192 optionally get_fabric_detail (for lab-test data on a specific fabric) OR get_fabric_suppliers (cross-check price vs other suppliers for same fabric).\nRETURNS: { supplier_id, count, data: [{ fabric_id, name_cn, category, weight, composition, price_rmb, moq }] }\n\nEXAMPLES:\n\u2022 User: \"What fabrics does sup_texhong_042 offer?\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_texhong_042\" })\n\u2022 User: \"Show me the fabric catalog and MOQs for sup_001\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_001\" })\n\u2022 User: \"sup_234 \u80fd\u505a\u54ea\u4e9b\u9762\u6599\uff0c\u62a5\u4ef7\u591a\u5c11\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_234\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 this supplier has no linked fabric catalog in the database. Either (a) they don't self-source fabrics (CMT-only) \u2014 confirm via get_supplier_detail.ownership_type, or (b) their catalog is unmapped \u2014 use search_fabrics with their expected specialization instead.\n\u2022 \"Supplier not found\" (implicit) \u2192 the supplier_id is invalid. Re-run search_suppliers.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this for a general fabric search \u2014 use search_fabrics. Do not call to compare prices across suppliers for the SAME fabric \u2014 use get_fabric_suppliers instead.\n\nNOTE: Source: MRC Data (meacheal.ai). Prices are supplier-quoted, not binding offers.\n\n\u4e2d\u6587\uff1a\u67e5\u8be2\u67d0\u4f9b\u5e94\u5546\u80fd\u4f9b\u5e94\u7684\u6240\u6709\u9762\u6599\u53ca\u5176\u62a5\u4ef7\u3001\u8d77\u8ba2\u91cf\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers, e.g. sup_001",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "get_supplier_fabrics",
"title": "Get Supplier's Fabric Catalog"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all suppliers offering a specific fabric, sorted by quality score, with price comparison.\n\nUSE WHEN user asks:\n- \"who supplies fabric fab_XXX\" / \"where can I buy this fabric\"\n- \"compare prices for [fabric] across suppliers\"\n- \"best supplier for [fabric specification]\"\n- \"which factory has the lowest price on FAB-XXX\"\n- \"rank suppliers by quality for this fabric\"\n- \"follow-up: 'who else sells this?'\"\n- \"source comparison for [fabric]\"\n- \"price spread on FAB-XXX\"\n- \"\u8c01\u5bb6\u6709\u8fd9\u5757\u9762\u6599 / \u54ea\u4e2a\u5382\u62a5\u4ef7\u6700\u4f4e / \u9762\u6599\u4f9b\u5e94\u5546\u5bf9\u6bd4\"\n- \"[\u9762\u6599] \u6709\u54ea\u4e9b\u4f9b\u5e94\u5546 / \u8d27\u6e90\"\n\nReturns supplier records linked to the fabric with: company name, location, quality\nscore, and that supplier's quoted price + MOQ for the fabric. Sorted by supplier\nquality score so the most reliable options appear first.\n\nPREREQUISITE: You MUST have a valid fabric_id from search_fabrics.\nWORKFLOW: search_fabrics \u2192 pick fabric_id \u2192 get_fabric_suppliers \u2192 optionally get_supplier_detail (vet the top-ranked supplier) OR compare_suppliers (up to 10 IDs from this list).\nRETURNS: { fabric_id, count, data: [{ supplier_id, company_name_cn, province, city, quality_score, price_rmb, moq }] }\n\nEXAMPLES:\n\u2022 User: \"Who supplies FAB-W007 and at what price?\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-W007\" })\n\u2022 User: \"Compare all suppliers for fabric FAB-K023\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-K023\" })\n\u2022 User: \"FAB-123 \u6709\u54ea\u4e9b\u4f9b\u5e94\u5546\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-123\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 no suppliers linked to this fabric. Either (a) fabric is a spec-sheet reference with no mapped source, or (b) suppliers carry this fabric but the link isn't captured. Try search_suppliers filtered by the fabric's typical specialization (e.g. denim cluster) instead.\n\u2022 \"Fabric not found\" (implicit) \u2192 fabric_id invalid. Re-run search_fabrics.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this to browse suppliers generally \u2014 use search_suppliers. Do not call to see a supplier's full fabric range \u2014 use get_supplier_fabrics.\n\nNOTE: Source: MRC Data (meacheal.ai). Sorted by supplier quality_score DESC.\n\n\u4e2d\u6587\uff1a\u67e5\u8be2\u67d0\u9762\u6599\u7684\u6240\u6709\u4f9b\u5e94\u5546\uff0c\u6309\u8d28\u91cf\u8bc4\u5206\u6392\u5e8f\uff0c\u542b\u62a5\u4ef7\u5bf9\u6bd4\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_id": {
"description": "Fabric ID from search_fabrics, e.g. FAB-W007",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"fabric_id"
],
"type": "object"
},
"name": "get_fabric_suppliers",
"title": "Get Fabric's Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all product categories available in the database with supplier counts.\n\nUSE THIS FIRST when:\n- User doesn't know what to search for\n- User asks \"what do you have\" / \"what can I source\"\n- User needs to explore the database\n- \"what's the most common product category in Guangdong\"\n- \"show me all product types you cover\"\n- \"which categories have the most suppliers\"\n- \"what apparel categories exist in [province]\"\n- \"database catalog / inventory overview / category list\"\n- \"\u6709\u54ea\u4e9b\u54c1\u7c7b / \u80fd\u627e\u4ec0\u4e48 / \u8986\u76d6\u54ea\u4e9b\u4ea7\u54c1 / \u54c1\u7c7b\u5206\u5e03\"\n- \"[\u7701\u4efd] \u4e3b\u8981\u505a\u4ec0\u4e48\u54c1\u7c7b\"\n\nWORKFLOW: Standalone discovery entry point. get_product_categories \u2192 search_suppliers (with the product_type the user picks) OR analyze_market (for market depth on that category).\nRETURNS: { total_categories, province_filter, data: [{ category: \"T\u6064\", supplier_count: 523 }, ...] }\n\nEXAMPLES:\n\u2022 User: \"What product types does your database cover?\"\n \u2192 get_product_categories({})\n\u2022 User: \"What categories are Guangdong suppliers making?\"\n \u2192 get_product_categories({ province: \"Guangdong\" })\n\u2022 User: \"\u6d59\u6c5f\u4e3b\u8981\u751f\u4ea7\u4ec0\u4e48\u54c1\u7c7b\"\n \u2192 get_product_categories({ province: \"Zhejiang\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 the province has no verified suppliers with typed product_types. Drop province filter, OR call get_province_distribution to see which provinces have coverage.\n\u2022 Invalid province \u2192 use English (Guangdong) or Chinese (\u5e7f\u4e1c). normalizeProvince handles both.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this before every search \u2014 it's an exploratory tool. Do not use for geographic insight \u2014 use get_province_distribution.\n\nNOTE: Returns all categories ranked by supplier count, so the most available product types appear first. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5217\u51fa\u6570\u636e\u5e93\u4e2d\u6240\u6709\u54c1\u7c7b\u53ca\u5176\u4f9b\u5e94\u5546\u6570\u91cf\uff0c\u6309\u6570\u91cf\u6392\u5e8f\u3002\u53ef\u6309\u7701\u4efd\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"province": {
"description": "Filter by province (e.g. guangdong, \u5e7f\u4e1c)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_product_categories",
"title": "List Product Categories"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Show supplier distribution across Chinese provinces.\n\nUSE WHEN:\n- User asks \"where are factories located\" / \"which provinces\"\n- User needs to decide which region to source from\n- \"where's [product] manufacturing concentrated in China\"\n- \"top provinces for [category]\"\n- \"geographic heatmap of suppliers for [product]\"\n- \"is sportswear mostly in Fujian or Zhejiang\"\n- \"which cities lead denim production\"\n- \"follow-up: 'break it down by province'\"\n- \"\u54ea\u91cc\u6709\u5de5\u5382 / \u4f9b\u5e94\u5546\u5206\u5e03 / \u4ea7\u4e1a\u5206\u5e03 / \u5730\u57df\u5206\u5e03\"\n- \"[\u54c1\u7c7b] \u4e3b\u8981\u5728\u54ea\u51e0\u4e2a\u7701 / \u54ea\u4e2a\u7701\u6700\u96c6\u4e2d\"\n\nWORKFLOW: Standalone discovery tool. get_province_distribution \u2192 search_suppliers (with top province) OR search_clusters (for clusters within that province) OR analyze_market (deeper view).\nRETURNS: { total_provinces, data: [{ province, supplier_count, top_cities: [{ city, count }] }] }\n\nEXAMPLES:\n\u2022 User: \"Where are most Chinese apparel factories located?\"\n \u2192 get_province_distribution({})\n\u2022 User: \"Which provinces lead in sportswear manufacturing?\"\n \u2192 get_province_distribution({ product_type: \"sportswear\" })\n\u2022 User: \"\u725b\u4ed4\u5de5\u5382\u4e3b\u8981\u5206\u5e03\u5728\u54ea\"\n \u2192 get_province_distribution({ product_type: \"denim\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data for product_type \u2192 product_type keyword may not match. Try TYPO_MAP synonyms (tee\u2192t-shirt, jeans\u2192denim, \u8fd0\u52a8\u670d\u2192activewear) or drop the filter entirely.\n\u2022 Sparse results (< 3 provinces) \u2192 the product is niche. Try the parent category or broaden the term.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call for cluster-level granularity \u2014 use search_clusters. Do not call without product_type if user is asking about a specific category \u2014 the unfiltered output is generic.\n\nNOTE: Provinces are ranked by supplier count (Guangdong, Zhejiang, Jiangsu, Fujian typically lead). Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u6309\u7701\u4efd\u5c55\u793a\u4f9b\u5e94\u5546\u5206\u5e03\uff0c\u542b\u6bcf\u7701 Top \u57ce\u5e02\u3002\u53ef\u6309\u54c1\u7c7b\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"product_type": {
"description": "Filter by product type (e.g. sportswear, t-shirt, \u8fd0\u52a8\u670d)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_province_distribution",
"title": "Province Distribution"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Smart supplier recommendation based on sourcing requirements.\n\nUSE WHEN:\n- User describes what they need: \"I need a factory for cotton t-shirts in Guangdong\"\n- User asks for recommendations, not just search results\n- \"who's the best factory for [product]\"\n- \"recommend a top supplier for my [product] line\"\n- \"shortlist 5 suppliers for [product] in [province]\"\n- \"best own-factory (not broker) for [product]\"\n- \"give me the top [product] manufacturer\"\n- \"which factory should I go with for [product]\"\n- \"\u63a8\u8350\u4f9b\u5e94\u5546 / \u5e2e\u6211\u627e\u5408\u9002\u7684\u5de5\u5382 / \u6700\u597d\u7684 [\u54c1\u7c7b] \u5382\"\n- \"\u5e2e\u6211\u6392\u4e2a\u4f18\u5148\u7ea7 / \u63a8\u8350\u51e0\u5bb6\u6700\u597d\u7684\"\n- \"\u6211\u60f3\u505a [\u54c1\u7c7b]\uff0c\u7ed9\u6211\u63a8\u8350\u51e0\u5bb6\u5de5\u5382\"\n\nWORKFLOW: Entry point for \"I need help finding a supplier\" requests. recommend_suppliers \u2192 get_supplier_detail (vet top pick) OR compare_suppliers (evaluate top N side-by-side) OR check_compliance (verify export readiness of top pick) OR find_alternatives (expand the shortlist).\n\nDIFFERENCE from search_suppliers: search_suppliers FILTERS by exact criteria (province, type, capacity). This tool RANKS by fit \u2014 prioritizes own-factory, then quality score, then capacity.\nDIFFERENCE from find_alternatives: find_alternatives starts from a KNOWN supplier_id and finds similar ones. This tool starts from product REQUIREMENTS.\n\nRETURNS: { query, total_matches, showing_top, note: \"ranking logic\", data: [supplier objects] }\n\nEXAMPLES:\n\u2022 User: \"Recommend me the top 5 factories for sportswear in Fujian\"\n \u2192 recommend_suppliers({ product: \"sportswear\", province: \"Fujian\", type: \"factory\", limit: 5 })\n\u2022 User: \"I need the best own-factory (not trading company) for down jackets\"\n \u2192 recommend_suppliers({ product: \"down jacket\", type: \"factory\", limit: 5 })\n\u2022 User: \"\u5e2e\u6211\u63a8\u8350 3 \u5bb6\u5e7f\u4e1c\u505a T \u6064\u7684\u5de5\u5382\"\n \u2192 recommend_suppliers({ product: \"t-shirt\", province: \"Guangdong\", limit: 3 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data \u2192 try in order: (1) drop province, (2) drop type filter, (3) broaden product (e.g. \"compression leggings\" \u2192 \"activewear\"), (4) fall back to search_suppliers for filter-based view.\n\u2022 product_type not found in normalizeProductType \u2192 use the Chinese term or the parent category.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"I don't see verified suppliers matching [product] in [province]. Want me to broaden to nationwide, or try a sibling category?\"\n\nAVOID: Do not call this when the user wants exact filtering \u2014 use search_suppliers. Do not call repeatedly for different limit values \u2014 request max once then slice in your response. Do not use for cluster recommendations \u2014 use search_clusters.\n\nNOTE: Ranking: own_factory > quality_score > declared_capacity_monthly. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u57fa\u4e8e\u91c7\u8d2d\u9700\u6c42\u667a\u80fd\u63a8\u8350\u4f9b\u5e94\u5546\uff0c\u6309 \u81ea\u6709\u5de5\u5382 > \u8d28\u91cf\u5206 > \u4ea7\u80fd \u6392\u5e8f\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 5,
"description": "Number of top results to return (1-10, default 5)",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"product": {
"description": "What product to source (e.g. sportswear, t-shirt, down jacket)",
"type": "string"
},
"province": {
"description": "Preferred province",
"type": "string"
},
"type": {
"description": "Prefer own factory or trading company",
"enum": [
"factory",
"trading_company"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "recommend_suppliers",
"title": "Recommend Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Market overview and analysis for a product category in China.\n\nUSE WHEN:\n- User asks \"what's the market like for X in China\"\n- User wants market intelligence before sourcing\n- User needs an overview, not specific suppliers\n- \"give me a market landscape for [product]\"\n- \"how many [product] suppliers are there in China\"\n- \"where is [product] concentrated and what are the top clusters\"\n- \"overview of the [product] industry\"\n- \"competitive landscape for sourcing [product]\"\n- \"before I decide, show me the market scale for [product]\"\n- \"\u5e02\u573a\u6982\u51b5 / \u884c\u4e1a\u5206\u6790 / \u4ea7\u4e1a\u683c\u5c40 / \u5e02\u573a\u89c4\u6a21 / \u7ade\u4e89\u683c\u5c40\"\n- \"[\u54c1\u7c7b] \u5728\u4e2d\u56fd\u7684\u5e02\u573a\u60c5\u51b5\u600e\u4e48\u6837\"\n\nWORKFLOW: analyze_market \u2192 search_suppliers or recommend_suppliers (narrow to specific suppliers) \u2192 compare_clusters (evaluate top clusters surfaced in related_clusters).\nRETURNS: { product, total_suppliers, by_province: [{province, cnt}], by_type: [{type, cnt}], related_clusters: [{name_cn, specialization, supplier_count}] }\n\nEXAMPLES:\n\u2022 User: \"What's the market landscape for sportswear sourcing in China?\"\n \u2192 analyze_market({ product: \"sportswear\" })\n\u2022 User: \"Give me an overview of the Chinese denim supply chain\"\n \u2192 analyze_market({ product: \"denim\" })\n\u2022 User: \"\u7ae5\u88c5\u5e02\u573a\u5728\u4e2d\u56fd\u7684\u683c\u5c40\"\n \u2192 analyze_market({ product: \"\u7ae5\u88c5\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 total_suppliers = 0 \u2192 product keyword unmatched. Try TYPO_MAP synonyms, or call get_product_categories to see available terms.\n\u2022 by_province sparse (< 3 entries) \u2192 the product is niche or keyword too specific. Try the parent category.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call for a specific supplier shortlist \u2014 use recommend_suppliers. Do not call for cluster details \u2014 use search_clusters. Do not call repeatedly for different products in a loop \u2014 batch the analysis in your response.\n\nNOTE: Bird's-eye view. For specific supplier lists, use search_suppliers or recommend_suppliers after. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5355\u4e2a\u54c1\u7c7b\u7684\u5e02\u573a\u603b\u89c8\uff08\u603b\u4f9b\u5e94\u5546\u6570\u3001\u7701\u4efd\u5206\u5e03\u3001\u7c7b\u578b\u5206\u5e03\u3001\u76f8\u5173\u4ea7\u4e1a\u5e26\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"product": {
"description": "Product category to analyze (e.g. sportswear, denim, underwear)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "analyze_market",
"title": "Analyze Market"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Estimate sourcing cost for a product based on fabric price, supplier pricing, and order quantity.\n\nUSE WHEN:\n- User asks \"how much would it cost to make 1000 t-shirts\"\n- User needs a rough cost breakdown for budgeting\n- \"ballpark cost to produce [quantity] [product] in China\"\n- \"budget estimate / sourcing cost / cost per piece for [product]\"\n- \"fabric cost + lead time estimate for [product]\"\n- \"how much to make [product] in [province]\"\n- \"rough quote / pricing range\"\n- \"can I make [product] for under $X per piece\"\n- \"\u591a\u5c11\u94b1 / \u6210\u672c\u4f30\u7b97 / \u62a5\u4ef7 / \u9884\u7b97 / \u505a\u4e00\u6279 [\u54c1\u7c7b] \u8981\u591a\u5c11\u94b1\"\n- \"[\u7701\u4efd] \u505a [\u54c1\u7c7b] \u7684\u6210\u672c\u5927\u6982\u591a\u5c11\"\n\nWORKFLOW: estimate_cost \u2192 optionally search_fabrics first to identify specific fabric_ids for accuracy \u2192 then recommend_suppliers for ready sources.\nRETURNS: { product, quantity, province, fabric_options: [{name, min_rmb, max_rmb, weight_gsm}], fabric_cost_per_meter, supplier_availability: { total_suppliers, avg_lead_time_days }, note }\n\nEXAMPLES:\n\u2022 User: \"Rough cost to make 1000 cotton t-shirts in Guangdong\"\n \u2192 estimate_cost({ product: \"t-shirt\", fabric_category: \"knit\", quantity: 1000, province: \"Guangdong\" })\n\u2022 User: \"What's the budget range for 5000 hoodies\"\n \u2192 estimate_cost({ product: \"hoodie\", quantity: 5000 })\n\u2022 User: \"\u505a 2000 \u4ef6\u7fbd\u7ed2\u670d\u5927\u6982\u591a\u5c11\u94b1\"\n \u2192 estimate_cost({ product: \"down jacket\", quantity: 2000 })\n\nERRORS & SELF-CORRECTION:\n\u2022 fabric_options empty \u2192 no matching fabrics for the product term. Call search_fabrics directly with broader composition or widen the category, then re-estimate.\n\u2022 supplier_availability.total_suppliers = 0 \u2192 drop province filter or broaden product term.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not present the output as a binding quote \u2014 always say \"estimate based on database averages, not binding\". Do not try to calculate per-piece cost from fabric alone \u2014 include labor, trim, margin externally. Do not use for detailed BOM costing \u2014 use search_fabrics + get_supplier_detail manually.\n\nCONSTRAINT: These are estimates based on database averages, NOT binding quotes. Always clarify this to the user. Fabric cost is per meter (typical usage: 1-3m per piece).\n\nNOTE: Cost accuracy improves when you provide a specific fabric_id via search_fabrics first. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u6309\u9762\u6599\u5747\u4ef7 + \u4f9b\u5e94\u5546\u4f9b\u8d27\u80fd\u529b\u4f30\u7b97 [\u54c1\u7c7b] \u7684\u751f\u4ea7\u6210\u672c\u533a\u95f4\u3002\u4ec5\u4f9b\u53c2\u8003\uff0c\u975e\u6b63\u5f0f\u62a5\u4ef7\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_category": {
"description": "Fabric category: knit, woven, functional",
"type": "string"
},
"product": {
"description": "Product type (e.g. t-shirt, hoodie, down jacket)",
"type": "string"
},
"province": {
"description": "Preferred sourcing province",
"type": "string"
},
"quantity": {
"default": 1000,
"description": "Order quantity in pieces",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "estimate_cost",
"title": "Estimate Sourcing Cost"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Check if a supplier meets compliance requirements for a target export market.\n\nUSE WHEN:\n- User asks \"can this factory export to the US/EU/Japan\"\n- User needs to verify certifications for a specific market\n- \"UFLPA / Xinjiang cotton / REACH / JIS / KC check on sup_XXX\"\n- \"is [supplier] ready for EU CSDDD / Forced Labor Regulation\"\n- \"what's missing for sup_XXX to export to US\"\n- \"gap analysis / compliance dossier for [supplier] \u2192 [market]\"\n- \"does [supplier] meet Japan formaldehyde / azo dye rules\"\n- \"follow-up after get_supplier_detail: 'is this one US-ready?'\"\n- \"\u80fd\u4e0d\u80fd\u51fa\u53e3\u7f8e\u56fd / \u6b27\u76df / \u65e5\u672c / \u97e9\u56fd\"\n- \"\u5408\u89c4\u68c0\u67e5 / \u8ba4\u8bc1\u8981\u6c42 / \u51fa\u53e3\u8d44\u8d28 / \u5f3a\u5236\u6027\u6cd5\u89c4 / UFLPA \u5408\u89c4\"\n- \"[\u4f9b\u5e94\u5546] \u80fd\u5426\u6ee1\u8db3 [\u5e02\u573a] \u7684\u51c6\u5165\u8981\u6c42\"\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers, get_supplier_detail, or recommend_suppliers.\nWORKFLOW: search_suppliers \u2192 check_compliance \u2192 if issues exist, use find_alternatives to source compliant alternatives OR get_supplier_detail to see the full compliance fields and coverage.\nRETURNS: { supplier_id, company_name, target_market, overall_ready: boolean, passed: [string], issues: [string], certifications: [string], market_requirements: {field: value}, note }\n\nEXAMPLES:\n\u2022 User: \"Can sup_001 export to the US? Check UFLPA compliance\"\n \u2192 check_compliance({ supplier_id: \"sup_001\", target_market: \"us\" })\n\u2022 User: \"Is Texhong EU REACH compliant?\"\n \u2192 check_compliance({ supplier_id: \"sup_texhong_042\", target_market: \"eu\" })\n\u2022 User: \"sup_234 \u80fd\u51fa\u53e3\u65e5\u672c\u5417\"\n \u2192 check_compliance({ supplier_id: \"sup_234\", target_market: \"japan\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 supplier_id invalid. Re-run search_suppliers.\n\u2022 passed=[] AND issues=[\"No specific issues found, but data may be incomplete\"] \u2192 the supplier's compliance fields are mostly null. Interpret as UNKNOWN not COMPLIANT. Tell user: \"Compliance data incomplete \u2014 recommend verifying directly with the supplier.\"\n\u2022 overall_ready=false with many issues \u2192 use find_alternatives to find backup suppliers, OR search_suppliers with compliance_status=\"compliant\" to filter upfront.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this in a loop across all suppliers \u2014 instead pre-filter via search_suppliers({ compliance_status: \"compliant\" }). Do not treat missing fields as non-compliant \u2014 report them as \"not confirmed\". Do not use for general supplier info \u2014 use get_supplier_detail.\n\nNOTE: Many suppliers have incomplete compliance data. Missing data = \"not confirmed\", not \"non-compliant\". Source: MRC Data (meacheal.ai). Market requirements cover UFLPA/Xinjiang (US), REACH/CSDDD/Forced Labor Reg (EU), formaldehyde/azo/JIS (Japan), KC (Korea).\n\n\u4e2d\u6587\uff1a\u68c0\u67e5\u67d0\u4f9b\u5e94\u5546\u662f\u5426\u6ee1\u8db3\u76ee\u6807\u51fa\u53e3\u5e02\u573a\uff08\u7f8e/\u6b27/\u65e5/\u97e9\uff09\u7684\u5408\u89c4\u8981\u6c42\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers, e.g. sup_001",
"type": "string"
},
"target_market": {
"description": "Target export market",
"enum": [
"us",
"eu",
"japan",
"korea"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id",
"target_market"
],
"type": "object"
},
"name": "check_compliance",
"title": "Check Export Compliance"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Find alternative suppliers similar to a given supplier.\n\nUSE WHEN:\n- User says \"this supplier is too expensive / too slow / too far\"\n- User needs backup options for an existing supplier\n- \"give me backup options for sup_XXX\"\n- \"find 5 alternatives to [supplier] in a different province\"\n- \"we need a cheaper / faster / closer / higher-quality alternative to sup_XXX\"\n- \"diversify our supplier pool away from [supplier]\"\n- \"de-risk single-source on sup_XXX\"\n- \"follow-up after get_supplier_detail: 'who else could make this?'\"\n- \"\u6709\u6ca1\u6709\u66ff\u4ee3 / \u627e\u7c7b\u4f3c\u7684 / \u6362\u4e00\u5bb6 / \u5907\u9009\u4f9b\u5e94\u5546 / \u5206\u6563\u4f9b\u5e94\u94fe\"\n- \"[\u4f9b\u5e94\u5546] \u592a\u8d35\u4e86 / \u592a\u6162\u4e86\uff0c\u6362\u4e00\u5bb6\"\n- \"\u7ed9\u6211\u51e0\u4e2a\u5907\u7528\u5de5\u5382 / \u5907\u9009\u65b9\u6848\"\n\nFinds suppliers that make the same products, optionally in a different\nprovince or with different attributes. Results exclude the original supplier.\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers, get_supplier_detail, or recommend_suppliers.\nWORKFLOW: search_suppliers \u2192 identify a candidate \u2192 find_alternatives \u2192 compare_suppliers (evaluate alternatives side-by-side) OR check_compliance (vet each alternative for target market).\n\nDIFFERENCE from recommend_suppliers: recommend_suppliers starts from product REQUIREMENTS. This tool starts from a KNOWN supplier_id and finds similar alternatives.\nDIFFERENCE from search_suppliers: search_suppliers filters by criteria. This tool uses an existing supplier as the baseline reference.\n\nRETURNS: { original_supplier, reason, alternatives: [supplier summaries], attribution }\n\nEXAMPLES:\n\u2022 User: \"sup_001 is too slow. Find 5 faster alternatives\"\n \u2192 find_alternatives({ supplier_id: \"sup_001\", reason: \"faster\", limit: 5 })\n\u2022 User: \"Give me cheaper backup options for sup_042 in Zhejiang\"\n \u2192 find_alternatives({ supplier_id: \"sup_042\", reason: \"cheaper\", province: \"Zhejiang\", limit: 5 })\n\u2022 User: \"sup_123 \u8d28\u91cf\u4e0d\u884c\uff0c\u63a8\u8350\u51e0\u5bb6\u8d28\u91cf\u66f4\u597d\u7684\"\n \u2192 find_alternatives({ supplier_id: \"sup_123\", reason: \"better_quality\", limit: 5 })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 supplier_id invalid. Re-run search_suppliers.\n\u2022 \"Original supplier has no product types listed\" \u2192 the reference supplier has no product_types field. Use recommend_suppliers with the product category the user actually wants instead.\n\u2022 Empty alternatives \u2192 the product type is rare OR province filter is too narrow. Drop province filter first, then try broader product search via recommend_suppliers.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this without first knowing the user's complaint (cheaper/faster/closer/quality) \u2014 without reason, results are generic. Do not call to find a supplier from scratch \u2014 use recommend_suppliers or search_suppliers. Do not compare via this tool \u2014 use compare_suppliers after.\n\nCONSTRAINT: Max 10 alternatives per call. Query matches up to 3 product types from the reference supplier.\n\nNOTE: Source: MRC Data (meacheal.ai). Sorting: \"faster\" uses lead_time_days.bulk_min ASC; others use quality_score DESC.\n\n\u4e2d\u6587\uff1a\u57fa\u4e8e\u5df2\u77e5 supplier_id \u67e5\u627e\u540c\u54c1\u7c7b\u7684\u5907\u9009\u4f9b\u5e94\u5546\uff08\u652f\u6301\u6309 \u4fbf\u5b9c/\u5feb/\u8fd1/\u8d28\u91cf \u6392\u5e8f\uff0c\u53ef\u9650\u5b9a\u7701\u4efd\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 5,
"description": "Number of top results to return (1-10, default 5)",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"province": {
"description": "Preferred province for alternatives",
"type": "string"
},
"reason": {
"default": "any",
"description": "Why looking for alternatives",
"enum": [
"cheaper",
"faster",
"closer",
"better_quality",
"any"
],
"type": "string"
},
"supplier_id": {
"description": "Current supplier ID to find alternatives for",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "find_alternatives",
"title": "Find Alternative Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Compare multiple suppliers side by side on all dimensions.\n\nUSE WHEN user asks:\n- \"compare these 3 factories\"\n- \"which supplier is better between X and Y\"\n- \"benchmark sup_001 vs sup_002 vs sup_003\"\n- \"side-by-side: capacity, certifications, quality score\"\n- \"rank these 5 suppliers by [dimension]\"\n- \"evaluate my shortlist\"\n- \"which of [supplier list] has the highest verified capacity\"\n- \"follow-up after recommend_suppliers: 'compare the top 3'\"\n- \"\u5bf9\u6bd4 [\u4f9b\u5e94\u5546 A] \u548c [\u4f9b\u5e94\u5546 B] / \u5bf9\u6bd4\u4f9b\u5e94\u5546 / \u4f9b\u5e94\u5546\u6a2a\u8bc4\"\n- \"\u54ea\u5bb6\u6700\u597d / \u6a2a\u5411\u8bc4\u4f30 / \u6bd4\u8f83\u8fd9\u51e0\u5bb6\"\n\nPREREQUISITE: You MUST have valid supplier_ids from search_suppliers, recommend_suppliers, find_alternatives, or get_cluster_suppliers. Do not guess IDs.\nWORKFLOW: search_suppliers/recommend_suppliers \u2192 collect supplier_ids \u2192 compare_suppliers \u2192 optionally check_compliance (verify top picks for target market) OR find_alternatives (expand the shortlist).\n\nDIFFERENCE from get_supplier_detail: This returns multiple suppliers at once for comparison. get_supplier_detail returns one with verified_dimensions breakdown.\n\nRETURNS: { count, data: [full supplier profiles with all fields] }\n\nEXAMPLES:\n\u2022 User: \"Compare sup_001, sup_002, sup_003 for me\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_001\", \"sup_002\", \"sup_003\"] })\n\u2022 User: \"Benchmark the top 5 you just recommended\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_A\", \"sup_B\", \"sup_C\", \"sup_D\", \"sup_E\"] })\n\u2022 User: \"\u6a2a\u5411\u5bf9\u6bd4 sup_100\u3001sup_200\u3001sup_300\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_100\", \"sup_200\", \"sup_300\"] })\n\nERRORS & SELF-CORRECTION:\n\u2022 Fewer results than IDs sent \u2192 missing IDs were silently skipped (invalid supplier_id). Re-run search_suppliers to verify.\n\u2022 count=0 \u2192 all IDs invalid. Re-run search_suppliers.\n\u2022 \"Too many IDs\" \u2192 split into batches of 10.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not loop get_supplier_detail \u2014 always use compare_suppliers when you have 2+ IDs. Do not pass more than 10 IDs. Do not use to find new suppliers \u2014 use search_suppliers or recommend_suppliers first.\n\nCONSTRAINT: Max 10 supplier IDs per call.\n\nNOTE: Source: MRC Data (meacheal.ai). Returns full 60+ field profile per supplier.\n\n\u4e2d\u6587\uff1a\u6a2a\u5411\u5bf9\u6bd4\u591a\u4e2a\u4f9b\u5e94\u5546\u7684\u5168\u90e8\u5b57\u6bb5\uff08\u6700\u591a 10 \u4e2a ID\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_ids": {
"description": "Array of supplier IDs from search_suppliers, e.g. ['sup_001', 'sup_002'], max 10",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_ids"
],
"type": "object"
},
"name": "compare_suppliers",
"title": "Compare Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all suppliers in a specific industrial cluster.\n\nUSE WHEN user asks:\n- \"what factories are in Humen cluster\"\n- \"show me suppliers in Keqiao fabric market\"\n- \"list all womenswear factories in [cluster]\"\n- \"top-quality suppliers in [cluster]\"\n- \"factory directory for [cluster]\"\n- \"page through suppliers in Shengze silk cluster\" (pagination)\n- \"follow-up after search_clusters: 'show me the factories there'\"\n- \"\u864e\u95e8\u4ea7\u4e1a\u5e26\u6709\u54ea\u4e9b\u4f9b\u5e94\u5546 / [\u4ea7\u4e1a\u5e26] \u7684\u5de5\u5382\u5217\u8868\"\n- \"[\u96c6\u7fa4] \u91cc\u6700\u597d\u7684\u51e0\u5bb6\u5de5\u5382\"\n\nPREREQUISITE: You MUST have a valid cluster_id from search_clusters.\nWORKFLOW: search_clusters \u2192 pick cluster_id \u2192 get_cluster_suppliers \u2192 optionally get_supplier_detail (vet top-ranked factory) OR compare_suppliers (evaluate top 3-10 factories in the cluster).\nRETURNS: { cluster_id, has_more, data: [supplier summary objects sorted by quality_score DESC] }\n\nEXAMPLES:\n\u2022 User: \"What factories are in the Humen womenswear cluster?\"\n \u2192 get_cluster_suppliers({ cluster_id: \"humen_women\", limit: 20 })\n\u2022 User: \"Show me the top 10 factories in Jinjiang sportswear cluster\"\n \u2192 get_cluster_suppliers({ cluster_id: \"jinjiang_sportswear\", limit: 10 })\n\u2022 User: \"\u864e\u95e8\u6709\u54ea\u4e9b\u670d\u88c5\u5382\uff0c\u5206\u9875\u770b\u7b2c\u4e8c\u9875\"\n \u2192 get_cluster_suppliers({ cluster_id: \"humen_women\", limit: 20, offset: 20 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data \u2192 either (a) cluster has no mapped suppliers (try compare_clusters to see supplier_count), or (b) cluster_id invalid. Re-run search_clusters.\n\u2022 cluster_id unknown \u2192 search_clusters({ specialization: \"...\" }) returns cluster_id values.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not guess cluster_ids \u2014 always resolve via search_clusters. Do not use this to find suppliers globally \u2014 use search_suppliers. Do not iterate clusters in a loop \u2014 use compare_clusters.\n\nNOTE: Sorted by quality_score DESC. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5217\u51fa\u67d0\u4ea7\u4e1a\u5e26\u5185\u6240\u6709\u4f9b\u5e94\u5546\uff0c\u6309\u8d28\u91cf\u8bc4\u5206\u6392\u5e8f\u3002\u5206\u9875\u6700\u591a 50 \u6761/\u9875\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cluster_id": {
"description": "Cluster ID from search_clusters, e.g. humen_women, keqiao_fabric, shishi_casual",
"type": "string"
},
"limit": {
"default": 20,
"description": "Page size: number of records to return (1-50, default 20)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"cluster_id"
],
"type": "object"
},
"name": "get_cluster_suppliers",
"title": "Get Cluster's Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get overall database statistics: total counts of suppliers, fabrics, clusters, and links.\n\nUSE WHEN user asks:\n- \"how big is your database\" / \"what's the coverage\" / \"data overview\"\n- \"how many suppliers / fabrics / clusters do you have\"\n- \"database size / scale / freshness\"\n- \"is the data up to date\"\n- \"live counts for MRC data\"\n- \"first-time onboarding: 'what can MRC data do for me'\"\n- \"\u6570\u636e\u5e93\u591a\u5927 / \u6709\u591a\u5c11\u6570\u636e / \u8986\u76d6\u591a\u5c11\u4f9b\u5e94\u5546\"\n- \"\u4f60\u4eec\u7684\u6570\u636e\u89c4\u6a21 / \u6570\u636e\u91cf / \u65b0\u9c9c\u5ea6\"\n\nWORKFLOW: Standalone discovery tool \u2014 call this first when a user asks about data scale or freshness. Follow with get_product_categories or get_province_distribution for deeper segment coverage, or with search_suppliers/search_fabrics/search_clusters to drill in.\n\nDIFFERENCE from database-overview resource (mrc://overview): This is dynamic (live counts + generated_at). The resource is static (geographic scope, top provinces, data standards).\n\nRETURNS: { database, generated_at, tables: { suppliers: { total }, fabrics: { total }, clusters: { total }, supplier_fabrics: { total } }, attribution }\n\nEXAMPLES:\n\u2022 User: \"How big is the MRC database?\"\n \u2192 get_stats({})\n\u2022 User: \"Give me the latest data scale numbers\"\n \u2192 get_stats({})\n\u2022 User: \"MRC \u6570\u636e\u5e93\u6709\u591a\u5c11\u4f9b\u5e94\u5546\u548c\u9762\u6599\"\n \u2192 get_stats({})\n\nERRORS & SELF-CORRECTION:\n\u2022 All counts 0 \u2192 database query failed or D1 binding lost. Retry once after 5 seconds. If still 0, surface a transport error to user.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this before every tool \u2014 only when user explicitly asks about scale. Do not call to get per-category counts \u2014 use get_product_categories. Do not call to get geographic scope metadata \u2014 use the database-overview resource (mrc://overview) which is static.\n\nNOTE: Only reports verified + partially_verified records. Unverified reserve data is excluded from counts. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u83b7\u53d6\u6570\u636e\u5e93\u6574\u4f53\u7edf\u8ba1\uff08\u4f9b\u5e94\u5546\u603b\u6570\u3001\u9762\u6599\u603b\u6570\u3001\u4ea7\u4e1a\u5e26\u603b\u6570\u3001\u5173\u8054\u8bb0\u5f55\u6570\uff09\u3002\u52a8\u6001\u5feb\u7167\uff0c\u542b\u751f\u6210\u65f6\u95f4\u6233\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_stats",
"title": "Get Database Stats"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": 401,
"expired_session_error": null,
"expired_session_status_code": 200,
"issues": [
"missing_protocol_header",
"bad_protocol_not_rejected",
"delete_session_unexpected",
"expired_session_not_404"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": true,
"transport": "streamable-http"
},
"latency_ms": 237.04,
"status": "error"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": {
"type": "resource",
"uri": "mrc://overview"
}
},
"initialize_capability_keys": [
"prompts",
"resources",
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 401,
"probe_status": "auth_required"
}
},
"latency_ms": 107.09,
"status": "ok"
}
},
"failures": {
"oauth_authorization_server": {
"reason": "no_authorization_server"
},
"oauth_protected_resource": {
"error": "Client error '404 Not Found' for url 'https://api.meacheal.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://api.meacheal.ai/.well-known/oauth-protected-resource"
},
"openid_configuration": {
"reason": "no_authorization_server"
},
"prompts_list": {
"error": "Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "text/plain;charset=UTF-8",
"strict-transport-security": "max-age=31536000"
},
"http_status": 400,
"payload": {},
"url": "https://api.meacheal.ai/mcp"
},
"resources_list": {
"error": "Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "text/plain;charset=UTF-8",
"strict-transport-security": "max-age=31536000"
},
"http_status": 400,
"payload": {},
"url": "https://api.meacheal.ai/mcp"
},
"tools_list": {
"error": "Client error '400 Bad Request' for url 'https://api.meacheal.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400",
"headers": {
"content-type": "text/plain;charset=UTF-8",
"strict-transport-security": "max-age=31536000"
},
"http_status": 400,
"payload": {},
"url": "https://api.meacheal.ai/mcp"
},
"transport_compliance_probe": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "text/event-stream",
"mcp-session-id": "dedfbe22f0f463ab114d892e5be03c848a825b8d9d6c85f33df16530231fe714",
"strict-transport-security": "max-age=31536000"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search verified Chinese apparel manufacturers, apparel factories, and clothing suppliers.\n\nUSE WHEN user asks:\n- \"find me a clothing manufacturer in China / Guangdong / Zhejiang\"\n- \"who makes [t-shirts / suits / denim / activewear] in China\"\n- \"I need a BSCI / OEKO-TEX certified apparel factory\"\n- \"looking for OEM / ODM apparel supplier with MOQ < N\"\n- \"find factories with production capacity > N pieces/month\"\n- \"list factories that export to the US / EU / Japan\"\n- \"show me trading companies in Yiwu / Shenzhen / Shanghai\"\n- \"which suppliers in [province] make [product]\" (follow-up drill-down)\n- \"give me another page of suppliers\" (pagination via offset)\n- \"who can produce knit tops under 300 MOQ\"\n- \"search by company name \u65b0\u946b / Xinxin / Texhong\"\n- \"find workshop-scale suppliers for small batch sampling\"\n- \"\u641c\u4f9b\u5e94\u5546 / \u627e\u670d\u88c5\u5382 / \u627e\u5236\u8863\u5382 / \u627e\u4ee3\u5de5\u5382 / \u627e\u5916\u8d38\u516c\u53f8\"\n- \"\u5e2e\u6211\u5728[\u7701\u4efd]\u627e[\u54c1\u7c7b]\u5de5\u5382\uff0c\u4ea7\u80fd\u81f3\u5c11 N \u4ef6/\u6708\"\n\nFilters: province, city, factory type (factory/trading_company/workshop), product category,\nminimum monthly capacity, compliance status, quality score. Returns paginated supplier list\nwith company name, location, monthly capacity (lab-verified), compliance, quality score.\n\nWORKFLOW: Primary entry point for supplier discovery. search_suppliers \u2192 get_supplier_detail (for full 60+ field profile) OR compare_suppliers (side-by-side for up to 10 IDs) OR find_alternatives (diversify the pool) OR check_compliance (verify export readiness) OR get_supplier_fabrics (see their fabric catalog).\nRETURNS: { has_more: boolean, available_dimensions: string[], data: [{ supplier_id, company_name_cn, company_name_en, type, province, city, product_types, quality_score, verified_dims: \"5/8\", coverage_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Find BSCI-certified denim factories in Guangdong with MOQ under 500\"\n \u2192 search_suppliers({ province: \"Guangdong\", product_type: \"denim\", compliance_status: \"compliant\", limit: 10 })\n\u2022 User: \"Who makes activewear for Lululemon in China?\"\n \u2192 search_suppliers({ product_type: \"activewear\" }) \u2014 then filter results by client brand in get_supplier_detail\n\u2022 User: \"\u6211\u8981\u5728\u6d59\u6c5f\u627e\u505a\u725b\u4ed4\u7684\u5de5\u5382\uff0c\u4ea7\u80fd\u5927\u4e8e 10 \u4e07\u4ef6\"\n \u2192 search_suppliers({ province: \"Zhejiang\", product_type: \"denim\", min_capacity: 100000 })\n\u2022 User: \"Show me the next 10 trading companies in Yiwu\"\n \u2192 search_suppliers({ city: \"Yiwu\", type: \"trading_company\", limit: 10, offset: 10 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try these in order: (1) remove min_capacity filter, (2) drop city but keep province, (3) broaden product_type to parent category (e.g. \"denim\" \u2192 \"bottoms\"), (4) drop compliance_status, (5) try recommend_suppliers for ranked fit.\n\u2022 \"Invalid province\" \u2192 use English (Guangdong) or standard Chinese (\u5e7f\u4e1c). Supported: 31 mainland provinces + HK/Macau.\n\u2022 product_type returns 0 \u2192 the TYPO_MAP normalizes common variants; try synonyms (\"tee\" \u2192 \"t-shirt\", \"jeans\" \u2192 \"denim\", \"\u8fd0\u52a8\u670d\" \u2192 \"activewear\").\n\u2022 Rate limit 429 \u2192 wait 60 seconds. Do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"I couldn't find suppliers matching [criteria]. Would you like me to broaden the search?\"\n\nAVOID: Do not call this tool in a loop across provinces \u2014 call get_province_distribution first to see where supply is concentrated. Do not use this for ranked \"best fit\" recommendations \u2014 use recommend_suppliers. Do not fetch details by looping \u2014 use compare_suppliers with up to 10 IDs.\n\nNOTE: Use this for FILTERING by exact criteria. For ranked recommendations based on sourcing needs, use recommend_suppliers instead. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u7ecf\u8fc7\u6838\u67e5\u7684\u4e2d\u56fd\u670d\u88c5\u4f9b\u5e94\u5546\u6863\u6848\uff0c\u6309\u5730\u533a\u3001\u7c7b\u578b\u3001\u4ea7\u80fd\u3001\u54c1\u7c7b\u3001\u5408\u89c4\u72b6\u6001\u7b49\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"city": {
"description": "City name",
"type": "string"
},
"compliance_status": {
"description": "Compliance status filter: compliant / partially_compliant / non_compliant",
"type": "string"
},
"data_confidence": {
"description": "Data quality filter: verified / partially_verified / unverified",
"type": "string"
},
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"min_capacity": {
"description": "Minimum monthly production capacity (pieces)",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"min_quality_score": {
"description": "Minimum quality score 1-10",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"product_type": {
"description": "Product category keyword (e.g. \u897f\u88c5 suits, \u5973\u88c5 womenswear, \u725b\u4ed4 denim, \u8fd0\u52a8\u670d activewear, t-shirt, \u886c\u886b shirts)",
"type": "string"
},
"province": {
"description": "Province in China (e.g. \u5e7f\u4e1c Guangdong, \u6d59\u6c5f Zhejiang, \u6c5f\u82cf Jiangsu, \u798f\u5efa Fujian, \u5c71\u4e1c Shandong)",
"type": "string"
},
"query": {
"description": "Search by company name \u2014 Chinese (\u5e7f\u5dde\u65b0\u946b) or English (Xinxin Garments)",
"type": "string"
},
"type": {
"description": "Supplier type",
"enum": [
"factory",
"trading_company",
"workshop",
"cooperative"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_suppliers",
"title": "Search Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the complete profile of a single Chinese apparel supplier by ID.\n\nPREREQUISITE: You MUST first call search_suppliers or recommend_suppliers to obtain a valid supplier_id. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"tell me more about [supplier]\" / \"show full details for sup_XXX\"\n- \"what certifications does this factory hold\"\n- \"what's their monthly capacity / worker count / equipment list\"\n- \"can [supplier] export to US / EU / Japan / Korea\"\n- \"give me the full profile / dossier / fact sheet for [supplier]\"\n- \"how verified is this supplier's data\" (returns coverage_pct + 8 dimensions)\n- \"what's their ownership type \u2014 own factory or broker\"\n- \"show payment terms / lead time / sample turnaround for sup_XXX\"\n- \"\u8fd9\u5bb6\u4f9b\u5e94\u5546\u5177\u4f53\u60c5\u51b5 / \u8be6\u7ec6\u8d44\u6599 / \u5de5\u5382\u6863\u6848\"\n- \"[\u4f9b\u5e94\u5546] \u7684\u5408\u89c4 / \u8ba4\u8bc1 / \u51fa\u53e3\u8d44\u8d28\"\n\nReturns 60+ fields including: monthly capacity (lab-verified), equipment list, certifications (BSCI/OEKO-TEX/GRS/SA8000), ownership type (own factory vs subcontractor vs broker), market access (US/EU/JP/KR), chemical compliance (ZDHC/MRSL), traceability depth, and verified_dimensions breakdown showing exactly which of the 8 dimensions (basic_info, geo_location, production, compliance, market_access, export, financial, contact) have data.\n\nWORKFLOW: search_suppliers \u2192 pick supplier_id \u2192 get_supplier_detail \u2192 optionally get_supplier_fabrics (fabric catalog) OR check_compliance (market export readiness) OR find_alternatives (backup pool) OR compare_suppliers (side-by-side evaluation).\nRETURNS: { data: { supplier_id, company_name_cn/en, type, province, city, product_types, worker_count, certifications, compliance_status, quality_score, verified_dimensions: { verified_dims: \"5/8\", coverage_pct, dimensions: {...} } } }\n\nEXAMPLES:\n\u2022 User: \"Show me the full profile for sup_001\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_001\" })\n\u2022 User: \"What certifications does Texhong hold and can they export to EU?\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_texhong_042\" }) \u2014 then inspect certifications + eu_market_ready; follow with check_compliance for formal verification\n\u2022 User: \"\u6211\u8981\u770b sup_123 \u7684\u5b8c\u6574\u6863\u6848\"\n \u2192 get_supplier_detail({ supplier_id: \"sup_123\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 the supplier_id is invalid or outside free-tier access. Re-run search_suppliers to obtain a fresh valid ID. Do not guess sequential IDs.\n\u2022 Field returns null \u2192 that dimension is unverified for this supplier. Check verified_dimensions.coverage_pct before asserting data. If coverage_pct < 50, warn the user: \"This supplier's record has limited verified data (X/8 dimensions). Consider find_alternatives for better-documented options.\"\n\u2022 \"not available for public access\" \u2192 this supplier is in the reserve pool (paid tier only). Use search_suppliers filters data_confidence=verified to stay in public tier.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this for multiple suppliers in a loop \u2014 use compare_suppliers with up to 10 IDs at once. Do not call to browse the database \u2014 use search_suppliers or get_province_distribution for discovery.\n\nNOTE: Source: MRC Data (meacheal.ai). Every numeric field shows both declared and lab-verified values where available.\n\n\u4e2d\u6587\uff1a\u6309 ID \u83b7\u53d6\u5355\u4e2a\u4f9b\u5e94\u5546\u7684\u5b8c\u6574\u6863\u6848\uff08\u542b\u7ef4\u5ea6\u8986\u76d6\u7387\u8be6\u60c5\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers results, e.g. sup_001",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "get_supplier_detail",
"title": "Get Supplier Detail"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search the Chinese fabric and textile database with lab-tested specifications.\n\nUSE WHEN user asks:\n- \"find me a [cotton / polyester / nylon / wool / linen] fabric for [t-shirts / jeans / suits]\"\n- \"I need 180gsm jersey knit with verified composition\"\n- \"fabrics under N RMB/meter for womenswear\"\n- \"compare lab-tested fabric weight across suppliers\"\n- \"show me functional fabrics for activewear / sportswear\"\n- \"what woven fabrics work for shirting\"\n- \"list organic / GOTS / recycled fabrics\"\n- \"I want heavyweight denim above 12 oz\"\n- \"fabrics with stretch / spandex content 2-5%\"\n- \"give me another page\" (pagination via offset)\n- \"lab-verified composition for [product]\" (quality check)\n- \"\u627e\u9762\u6599 / \u641c\u9762\u6599 / \u67e5\u9762\u6599 / \u627e\u5e03\u6599 / \u6253\u6837\u9762\u6599\"\n- \"\u6211\u8981\u505a T \u6064\uff0c\u5e2e\u6211\u627e\u514b\u91cd 180-220 \u7684\u9488\u7ec7\u9762\u6599\"\n\nFilters: category (woven/knit/nonwoven/leather/functional), weight range (gsm),\ncomposition keyword, target apparel type, max price. Returns paginated fabric list\nwith name, lab-tested weight, lab-tested composition, price range, suitable\napparel, and data confidence level.\n\nWORKFLOW: Primary entry point for fabric discovery. search_fabrics \u2192 get_fabric_detail (full 30+ lab-test fields) OR get_fabric_suppliers (compare supplier prices for same fabric) OR estimate_cost (budget the product).\nRETURNS: { has_more: boolean, available_dimensions: [\"basic_info\",\"composition\",\"physical_properties\",\"lab_test\",\"commercial\"], data: [{ fabric_id, name_cn, category, subcategory, declared_weight_gsm, declared_composition, price_range_rmb, suitable_for, verified_dims: \"4/5\", coverage_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Find 180-220gsm cotton jersey for t-shirts under 35 RMB/m\"\n \u2192 search_fabrics({ category: \"knit\", min_weight_gsm: 180, max_weight_gsm: 220, composition: \"cotton\", suitable_for: \"t-shirt\", max_price_rmb: 35 })\n\u2022 User: \"I need stretch denim for women's jeans\"\n \u2192 search_fabrics({ category: \"woven\", composition: \"spandex\", suitable_for: \"denim\" })\n\u2022 User: \"\u5e2e\u6211\u627e\u9002\u5408\u505a\u886c\u886b\u7684\u68ad\u7ec7\u9762\u6599\uff0c\u68c9 60% \u4ee5\u4e0a\"\n \u2192 search_fabrics({ category: \"woven\", composition: \"cotton\", suitable_for: \"shirt\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try in order: (1) drop suitable_for, (2) widen weight range by 50gsm each side, (3) broaden composition (e.g. \"cotton\" instead of \"organic cotton\"), (4) drop max_price_rmb, (5) try the parent category (knit \u2192 all).\n\u2022 Composition mismatch \u2192 TYPO_MAP normalizes common misspellings (e.g. \"poly\" \u2192 \"polyester\", \"lycra\" \u2192 \"spandex\"). If still no match, try the Chinese term (\u68c9/\u6da4\u7eb6/\u6c28\u7eb6/\u9526\u7eb6).\n\u2022 Rate limit 429 \u2192 wait 60 seconds. Do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"No fabric matches [criteria]. Would you like to broaden weight/price/composition?\"\n\nAVOID: Do not call this looking for a specific named fabric SKU \u2014 search by specs instead (weight + composition + category). Do not fetch full lab-test data this way \u2014 use get_fabric_detail. Do not call repeatedly for supplier pricing on the same fabric \u2014 use get_fabric_suppliers.\n\nCONSTRAINT: This returns summaries only \u2014 for full lab-test results (color fastness, shrinkage, pilling, tensile strength), call get_fabric_detail.\n\nNOTE: Source: MRC Data (meacheal.ai). Every record includes AATCC / ISO / GB lab test measurements where verified.\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u9762\u6599\u6570\u636e\u5e93\uff0c\u6309\u54c1\u7c7b\u3001\u514b\u91cd\u3001\u6210\u5206\u3001\u9002\u7528\u54c1\u7c7b\u3001\u4ef7\u683c\u7b5b\u9009\u3002\u6bcf\u6761\u5747\u542b AATCC / ISO / GB \u65b9\u6cd5\u7684\u5b9e\u6d4b\u6570\u636e\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"category": {
"description": "Fabric category: woven (\u68ad\u7ec7) / knit (\u9488\u7ec7) / nonwoven (\u65e0\u7eba) / leather (\u76ae\u9769) / fur (\u6bdb\u76ae) / functional (\u529f\u80fd\u6027)",
"type": "string"
},
"composition": {
"description": "Fiber composition keyword (e.g. cotton, polyester, spandex, nylon, wool, linen, \u68c9, \u6da4\u7eb6)",
"type": "string"
},
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"max_price_rmb": {
"description": "Maximum price in RMB per meter",
"type": "number"
},
"max_weight_gsm": {
"description": "Maximum fabric weight in grams per square meter",
"type": "number"
},
"min_weight_gsm": {
"description": "Minimum fabric weight in grams per square meter",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"suitable_for": {
"description": "Target apparel keyword (e.g. T\u6064 t-shirt, \u886c\u886b shirt, \u725b\u4ed4 denim, \u8fde\u8863\u88d9 dress)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_fabrics",
"title": "Search Fabrics"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get the complete lab-tested record of a single fabric by ID.\n\nPREREQUISITE: You MUST first call search_fabrics to obtain a valid fabric_id. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"show me the full specs for fabric FAB-W007\"\n- \"what's the color fastness / shrinkage / pilling grade on [fabric]\"\n- \"lab-test data for [fabric]\" / \"\u5b9e\u6d4b\u6570\u636e\"\n- \"compare declared vs lab-measured weight for FAB-XXX\"\n- \"what's the MOQ / lead time / price for this fabric\"\n- \"tensile strength / tear strength / hand feel / drape / stretch recovery\"\n- \"can you confirm composition % on lab test for FAB-XXX\"\n- \"\u8be6\u7ec6\u53c2\u6570 / \u5b8c\u6574\u6863\u6848 / AATCC \u6570\u636e / \u68c0\u6d4b\u62a5\u544a\"\n- \"\u8fd9\u5757\u9762\u6599\u7684\u7f29\u6c34\u7387 / \u8272\u7262\u5ea6 / \u8d77\u7403\u7b49\u7ea7\"\n- \"follow-up: 'show me the full record for the first fabric in that list'\"\n\nReturns 30+ fields: lab-tested weight, lab-tested composition, color fastness (wash/light/rub per AATCC 61/16/8), shrinkage (warp/weft per AATCC 135), tensile/tear strength, pilling grade, hand feel, drape, stretch/recovery, MOQ, lead time, price range.\n\nWORKFLOW: search_fabrics \u2192 pick fabric_id \u2192 get_fabric_detail \u2192 optionally get_fabric_suppliers (to find which factories supply it at what price) OR detect_discrepancy (if user doubts declared specs).\nRETURNS: { data: { fabric_id, name_cn/en, category, all lab-test fields, verified_dimensions: { basic_info, composition, physical_properties, lab_test, commercial } } }\n\nEXAMPLES:\n\u2022 User: \"Show me all lab-test data for FAB-W007\"\n \u2192 get_fabric_detail({ fabric_id: \"FAB-W007\" })\n\u2022 User: \"What's the shrinkage and pilling grade on the second fabric I just saw?\"\n \u2192 get_fabric_detail({ fabric_id: \"<the_id_from_search>\" })\n\u2022 User: \"\u6211\u8981 FAB-K023 \u7684\u5b8c\u6574\u5b9e\u6d4b\u6863\u6848\"\n \u2192 get_fabric_detail({ fabric_id: \"FAB-K023\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Fabric not found\" \u2192 the fabric_id is invalid. Re-run search_fabrics and use an ID from the fresh results.\n\u2022 Field returns null \u2192 that test wasn't performed on this fabric. Check verified_dimensions.lab_test to see what IS tested before asserting anything.\n\u2022 \"not available\" \u2192 unverified fabric in reserve pool. Filter search_fabrics for higher data_confidence.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call in a loop for multiple fabrics \u2014 if user wants to compare fabrics, present the search_fabrics summary list instead. Do not call to browse \u2014 use search_fabrics with filters.\n\nNOTE: Source: MRC Data (meacheal.ai). AATCC/ISO/GB methods cited per field.\n\n\u4e2d\u6587\uff1a\u6309 ID \u83b7\u53d6\u5355\u4e2a\u9762\u6599\u7684\u5b8c\u6574\u5b9e\u6d4b\u6863\u6848\uff08\u542b AATCC/ISO/GB \u68c0\u6d4b\u6307\u6807\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_id": {
"description": "Fabric ID from search_fabrics results, e.g. FAB-W007",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"fabric_id"
],
"type": "object"
},
"name": "get_fabric_detail",
"title": "Get Fabric Detail"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Search Chinese apparel industrial clusters and textile markets.\n\nUSE WHEN user asks:\n- \"where is China's [denim / suit / women's wear / underwear] manufacturing concentrated\"\n- \"what is the largest [silk / cashmere / down jacket] industrial cluster in China\"\n- \"industrial cluster comparison Humen vs Shaoxing vs Haining vs Zhili\"\n- \"recommend an industrial cluster for sourcing [product]\"\n- \"where should I set up a sourcing office for [category]\"\n- \"list mega clusters for [category]\"\n- \"fabric markets in Zhejiang / Jiangsu\"\n- \"accessories / trim / zipper / button markets in China\"\n- \"which province dominates [category] exports\"\n- \"follow-up: 'tell me more about Humen's cluster scale'\"\n- \"\u670d\u88c5\u4ea7\u4e1a\u5e26 / \u9762\u6599\u5e02\u573a / \u4ea7\u4e1a\u96c6\u7fa4 / \u7eba\u7ec7\u96c6\u7fa4 / \u8f85\u6599\u5e02\u573a\"\n- \"\u505a [\u54c1\u7c7b] \u5e94\u8be5\u53bb\u54ea\u4e2a\u4ea7\u4e1a\u5e26 / \u96c6\u7fa4\u63a8\u8350\"\n\nFamous clusters this database covers include: Humen (Guangdong, womenswear), Shaoxing\nKeqiao (Zhejiang, fabric mega-market), Haining (Zhejiang, leather), Zhili (Zhejiang,\nchildren's wear), Shengze (Jiangsu, silk), Shantou (Guangdong, underwear), Puning\n(Guangdong, jeans), Jinjiang (Fujian, sportswear), and more.\n\nReturns paginated cluster list with name, location, specialization, scale, supplier\ncount, average rent and labor cost, and key advantages/risks.\n\nWORKFLOW: Cluster discovery entry point. search_clusters \u2192 compare_clusters (side-by-side up to 10 cluster_ids) OR get_cluster_suppliers (list factories in that cluster) OR analyze_market (broader market view).\nRETURNS: { has_more: boolean, data: [{ cluster_id, name_cn, name_en, type, province, city, specialization, scale, supplier_count, labor_cost_avg_rmb }] }\n\nEXAMPLES:\n\u2022 User: \"Where are the biggest denim clusters in China?\"\n \u2192 search_clusters({ specialization: \"denim\", scale: \"mega\" })\n\u2022 User: \"Show me fabric markets in Zhejiang\"\n \u2192 search_clusters({ province: \"Zhejiang\", type: \"fabric_market\" })\n\u2022 User: \"\u7ae5\u88c5\u4ea7\u4e1a\u5e26\u6709\u54ea\u4e9b\"\n \u2192 search_clusters({ specialization: \"\u7ae5\u88c5\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 try in order: (1) drop scale filter, (2) broaden specialization (e.g. \"\u670d\u88c5\" instead of \"\u725b\u4ed4\"), (3) remove type, (4) remove province.\n\u2022 Specialization mismatch \u2192 both Chinese and English work. Synonyms: sportswear/\u8fd0\u52a8\u670d, womenswear/\u5973\u88c5, underwear/\u5185\u8863, denim/\u725b\u4ed4.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"No clusters match [criteria]. Try broader specialization or removing filters.\"\n\nAVOID: Do not use this for specific factory search \u2014 use search_suppliers. Do not compare clusters by calling search_clusters twice \u2014 use compare_clusters with cluster_ids.\n\nNOTE: Source: MRC Data (meacheal.ai). 170+ clusters mapped across 31 provinces.\n\n\u4e2d\u6587\uff1a\u641c\u7d22\u4e2d\u56fd\u670d\u88c5\u4ea7\u4e1a\u5e26\u548c\u9762\u6599\u5e02\u573a\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 10,
"description": "Page size: number of records to return (1-50, default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"province": {
"description": "Province in China (e.g. Guangdong, Zhejiang, Jiangsu, Fujian, Shandong)",
"type": "string"
},
"scale": {
"description": "Cluster scale: mega / large / medium / small",
"type": "string"
},
"specialization": {
"description": "Primary specialization keyword (e.g. \u725b\u4ed4 denim, \u5973\u88c5 womenswear, \u7ae5\u88c5 childrenswear, \u5185\u8863 underwear, \u8fd0\u52a8\u670d sportswear)",
"type": "string"
},
"type": {
"description": "Cluster type: fabric_market (\u9762\u6599\u5e02\u573a) / garment_manufacturing (\u670d\u88c5\u5236\u9020) / accessories (\u8f85\u6599) / integrated (\u7efc\u5408)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "search_clusters",
"title": "Search Industrial Clusters"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Compare multiple Chinese apparel industrial clusters side-by-side on key metrics.\n\nPREREQUISITE: You MUST first call search_clusters to obtain valid cluster_ids. Do not guess IDs.\n\nUSE WHEN user asks:\n- \"compare Humen vs Shishi vs Jinjiang\"\n- \"which cluster has lower labor cost \u2014 Humen or Dongguan\"\n- \"side-by-side: Haining vs Xintang for denim\"\n- \"evaluate 3 clusters for my sportswear line\"\n- \"\u5bf9\u6bd4 [\u4ea7\u4e1a\u5e261] \u548c [\u4ea7\u4e1a\u5e262]\" / \"\u54ea\u4e2a\u96c6\u7fa4\u66f4\u9002\u5408 [\u54c1\u7c7b]\"\n- \"rank these clusters by supplier count\"\n- \"which cluster has the highest scale for womenswear\"\n- \"follow-up: 'now compare the top 3 clusters you just listed'\"\n\nReturns full records for each cluster so they can be compared on labor cost, rent, supplier count, scale, specializations, advantages, and risks.\n\nWORKFLOW: search_clusters \u2192 collect cluster_ids \u2192 compare_clusters \u2192 optionally get_cluster_suppliers on the winner to list factories in that specific cluster.\nRETURNS: { count: number, data: [full cluster objects with all fields] }\n\nEXAMPLES:\n\u2022 User: \"Compare Humen, Shishi, and Jinjiang for sportswear sourcing\"\n \u2192 compare_clusters({ cluster_ids: [\"humen_women\", \"shishi_casual\", \"jinjiang_sportswear\"] })\n\u2022 User: \"I want to evaluate Keqiao vs Zhili fabric markets\"\n \u2192 compare_clusters({ cluster_ids: [\"keqiao_fabric\", \"zhili_children\"] })\n\u2022 User: \"\u5bf9\u6bd4\u864e\u95e8\u3001\u77f3\u72ee\u3001\u664b\u6c5f\u4e09\u4e2a\u4ea7\u4e1a\u5e26\"\n \u2192 compare_clusters({ cluster_ids: [\"humen_women\", \"shishi_casual\", \"jinjiang_sportswear\"] })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Too many IDs (>10)\" \u2192 split into batches of 10 and aggregate results in your response.\n\u2022 Fewer results than IDs sent \u2192 missing IDs were silently skipped (invalid cluster_id). Re-run search_clusters to verify IDs.\n\u2022 Empty data \u2192 all IDs were invalid. Re-run search_clusters and try again with fresh IDs.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call with guessed cluster_ids \u2014 always resolve them via search_clusters first. Do not use to list factories in a cluster \u2014 use get_cluster_suppliers. Do not compare > 10 clusters in one call.\n\nCONSTRAINT: Max 10 cluster IDs per call.\n\nNOTE: Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5bf9\u6bd4\u591a\u4e2a\u4ea7\u4e1a\u5e26\u7684\u6838\u5fc3\u6307\u6807\uff08\u6700\u591a 10 \u4e2a\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cluster_ids": {
"description": "Array of cluster IDs to compare, max 10",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"cluster_ids"
],
"type": "object"
},
"name": "compare_clusters",
"title": "Compare Industrial Clusters"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "[Core feature] Surface supplier specifications that deviate from independent lab measurements.\n\nUSE WHEN user asks:\n- \"which fabrics have lab-test deviations on weight\"\n- \"find suppliers whose stated capacity differs from on-site measurements\"\n- \"compare cotton content lab results across suppliers\"\n- \"which suppliers have the closest match between specs and lab tests\"\n- \"show me suppliers with >20% capacity over-reporting\"\n- \"which factories inflate worker count\"\n- \"audit integrity check on our supplier pool\"\n- \"follow-up: 'are any of these suppliers flagged for discrepancy?'\"\n- \"data integrity / quality audit / spec validation\"\n- \"\u5b9e\u6d4b\u6570\u636e / \u6570\u636e\u53ef\u4fe1\u5ea6 / \u89c4\u683c\u4e0e\u5b9e\u6d4b\u504f\u5dee / \u865a\u62a5\u4ea7\u80fd / \u6210\u5206\u4e0d\u7b26\"\n- \"\u54ea\u4e9b\u4f9b\u5e94\u5546\u4ea7\u80fd\u9020\u5047 / \u6570\u636e\u4e0d\u51c6\"\n\nThis is the moat of MRC Data \u2014 every record is enriched with AATCC / ISO / GB\nlab test data, giving AI agents verifiable specifications instead of unaudited\nB2B directory listings.\n\nReturns up to 50 records across: fabric_weight (gsm), fabric_composition (fiber %),\nsupplier_capacity (monthly pcs), worker_count. Each record includes both the\nspec value and the lab measurement, with the deviation percentage.\n\nWORKFLOW: Standalone audit tool \u2014 does not require prior search. Call directly with field type and threshold. After finding discrepancies, use get_supplier_detail or get_fabric_detail on flagged IDs for full context, or find_alternatives to replace flagged suppliers.\nRETURNS: { field, min_discrepancy_pct, count, data: [{ id, name, declared_value, tested_value, discrepancy_pct }] }\n\nEXAMPLES:\n\u2022 User: \"Which fabrics have more than 10% weight deviation from their spec sheets?\"\n \u2192 detect_discrepancy({ field: \"fabric_weight\", min_discrepancy_pct: 10 })\n\u2022 User: \"Find suppliers whose declared monthly capacity is >25% off from verified measurements\"\n \u2192 detect_discrepancy({ field: \"supplier_capacity\", min_discrepancy_pct: 25 })\n\u2022 User: \"\u54ea\u4e9b\u9762\u6599\u7684\u6210\u5206\u8ddf\u5b9e\u6d4b\u4e0d\u4e00\u6837\"\n \u2192 detect_discrepancy({ field: \"fabric_composition\" }) \u2014 composition is exact-match, no threshold\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 no records above threshold. Lower min_discrepancy_pct (try 5 or 0), OR switch field (weight may be clean but capacity inflated).\n\u2022 Only partial dataset returned \u2192 many records have only declared OR only tested values; discrepancy requires both. This is a data coverage limit, not a bug.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not present discrepancy data as proof of fraud \u2014 call it out as \"declared vs lab-measured delta\". Do not loop over thresholds \u2014 call once with min_discrepancy_pct=0 and filter in your response.\n\nCONSTRAINT: Only works when both declared AND tested values exist for the same record. Many records have only one or the other. Max 50 records per call.\n\nNOTE: Source: MRC Data (meacheal.ai). Methods: AATCC / ISO / GB per field.\n\n\u4e2d\u6587\uff1a\u8bc6\u522b\u4f9b\u5e94\u5546\u89c4\u683c\u4e0e\u5b9e\u6d4b\u503c\u504f\u5dee\u8f83\u5927\u7684\u8bb0\u5f55\u3002\u8fd4\u56de\u89c4\u683c\u503c\u3001\u5b9e\u6d4b\u503c\u3001\u504f\u5dee\u767e\u5206\u6bd4\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"field": {
"description": "Type of discrepancy to detect: fabric_weight (\u9762\u6599\u514b\u91cd) / fabric_composition (\u6210\u5206) / supplier_capacity (\u4ea7\u80fd) / worker_count (\u5de5\u4eba\u6570)",
"enum": [
"fabric_weight",
"fabric_composition",
"supplier_capacity",
"worker_count"
],
"type": "string"
},
"min_discrepancy_pct": {
"default": 0,
"description": "Minimum discrepancy threshold as percentage (e.g. 10 = only show \u226510% mismatch)",
"type": "number"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"field"
],
"type": "object"
},
"name": "detect_discrepancy",
"title": "Detect Spec Discrepancies"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all fabrics a specific supplier can provide, with quoted prices.\n\nUSE WHEN user asks:\n- \"what fabrics does [supplier name] have\" / \"what can this factory source for me\"\n- \"show me the catalog of supplier sup_XXX\"\n- \"what does this manufacturer offer\"\n- \"what fabric options does sup_XXX quote for denim\"\n- \"does [supplier] supply [fabric type]\"\n- \"price list / fabric catalog / offering sheet for sup_XXX\"\n- \"MOQ per fabric at this supplier\"\n- \"follow-up: 'what fabrics can they supply?' after identifying a supplier\"\n- \"[\u4f9b\u5e94\u5546] \u80fd\u4f9b\u5e94\u54ea\u4e9b\u9762\u6599 / \u62a5\u4ef7\u8868 / \u8d77\u8ba2\u91cf\"\n\nReturns fabric records linked to the supplier with: fabric name, category, weight,\ncomposition, and the supplier's quoted price + MOQ for that specific fabric.\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers or get_supplier_detail.\nWORKFLOW: search_suppliers \u2192 get_supplier_detail \u2192 get_supplier_fabrics \u2192 optionally get_fabric_detail (for lab-test data on a specific fabric) OR get_fabric_suppliers (cross-check price vs other suppliers for same fabric).\nRETURNS: { supplier_id, count, data: [{ fabric_id, name_cn, category, weight, composition, price_rmb, moq }] }\n\nEXAMPLES:\n\u2022 User: \"What fabrics does sup_texhong_042 offer?\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_texhong_042\" })\n\u2022 User: \"Show me the fabric catalog and MOQs for sup_001\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_001\" })\n\u2022 User: \"sup_234 \u80fd\u505a\u54ea\u4e9b\u9762\u6599\uff0c\u62a5\u4ef7\u591a\u5c11\"\n \u2192 get_supplier_fabrics({ supplier_id: \"sup_234\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 this supplier has no linked fabric catalog in the database. Either (a) they don't self-source fabrics (CMT-only) \u2014 confirm via get_supplier_detail.ownership_type, or (b) their catalog is unmapped \u2014 use search_fabrics with their expected specialization instead.\n\u2022 \"Supplier not found\" (implicit) \u2192 the supplier_id is invalid. Re-run search_suppliers.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this for a general fabric search \u2014 use search_fabrics. Do not call to compare prices across suppliers for the SAME fabric \u2014 use get_fabric_suppliers instead.\n\nNOTE: Source: MRC Data (meacheal.ai). Prices are supplier-quoted, not binding offers.\n\n\u4e2d\u6587\uff1a\u67e5\u8be2\u67d0\u4f9b\u5e94\u5546\u80fd\u4f9b\u5e94\u7684\u6240\u6709\u9762\u6599\u53ca\u5176\u62a5\u4ef7\u3001\u8d77\u8ba2\u91cf\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers, e.g. sup_001",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "get_supplier_fabrics",
"title": "Get Supplier's Fabric Catalog"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all suppliers offering a specific fabric, sorted by quality score, with price comparison.\n\nUSE WHEN user asks:\n- \"who supplies fabric fab_XXX\" / \"where can I buy this fabric\"\n- \"compare prices for [fabric] across suppliers\"\n- \"best supplier for [fabric specification]\"\n- \"which factory has the lowest price on FAB-XXX\"\n- \"rank suppliers by quality for this fabric\"\n- \"follow-up: 'who else sells this?'\"\n- \"source comparison for [fabric]\"\n- \"price spread on FAB-XXX\"\n- \"\u8c01\u5bb6\u6709\u8fd9\u5757\u9762\u6599 / \u54ea\u4e2a\u5382\u62a5\u4ef7\u6700\u4f4e / \u9762\u6599\u4f9b\u5e94\u5546\u5bf9\u6bd4\"\n- \"[\u9762\u6599] \u6709\u54ea\u4e9b\u4f9b\u5e94\u5546 / \u8d27\u6e90\"\n\nReturns supplier records linked to the fabric with: company name, location, quality\nscore, and that supplier's quoted price + MOQ for the fabric. Sorted by supplier\nquality score so the most reliable options appear first.\n\nPREREQUISITE: You MUST have a valid fabric_id from search_fabrics.\nWORKFLOW: search_fabrics \u2192 pick fabric_id \u2192 get_fabric_suppliers \u2192 optionally get_supplier_detail (vet the top-ranked supplier) OR compare_suppliers (up to 10 IDs from this list).\nRETURNS: { fabric_id, count, data: [{ supplier_id, company_name_cn, province, city, quality_score, price_rmb, moq }] }\n\nEXAMPLES:\n\u2022 User: \"Who supplies FAB-W007 and at what price?\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-W007\" })\n\u2022 User: \"Compare all suppliers for fabric FAB-K023\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-K023\" })\n\u2022 User: \"FAB-123 \u6709\u54ea\u4e9b\u4f9b\u5e94\u5546\"\n \u2192 get_fabric_suppliers({ fabric_id: \"FAB-123\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 count=0 \u2192 no suppliers linked to this fabric. Either (a) fabric is a spec-sheet reference with no mapped source, or (b) suppliers carry this fabric but the link isn't captured. Try search_suppliers filtered by the fabric's typical specialization (e.g. denim cluster) instead.\n\u2022 \"Fabric not found\" (implicit) \u2192 fabric_id invalid. Re-run search_fabrics.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this to browse suppliers generally \u2014 use search_suppliers. Do not call to see a supplier's full fabric range \u2014 use get_supplier_fabrics.\n\nNOTE: Source: MRC Data (meacheal.ai). Sorted by supplier quality_score DESC.\n\n\u4e2d\u6587\uff1a\u67e5\u8be2\u67d0\u9762\u6599\u7684\u6240\u6709\u4f9b\u5e94\u5546\uff0c\u6309\u8d28\u91cf\u8bc4\u5206\u6392\u5e8f\uff0c\u542b\u62a5\u4ef7\u5bf9\u6bd4\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_id": {
"description": "Fabric ID from search_fabrics, e.g. FAB-W007",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"fabric_id"
],
"type": "object"
},
"name": "get_fabric_suppliers",
"title": "Get Fabric's Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all product categories available in the database with supplier counts.\n\nUSE THIS FIRST when:\n- User doesn't know what to search for\n- User asks \"what do you have\" / \"what can I source\"\n- User needs to explore the database\n- \"what's the most common product category in Guangdong\"\n- \"show me all product types you cover\"\n- \"which categories have the most suppliers\"\n- \"what apparel categories exist in [province]\"\n- \"database catalog / inventory overview / category list\"\n- \"\u6709\u54ea\u4e9b\u54c1\u7c7b / \u80fd\u627e\u4ec0\u4e48 / \u8986\u76d6\u54ea\u4e9b\u4ea7\u54c1 / \u54c1\u7c7b\u5206\u5e03\"\n- \"[\u7701\u4efd] \u4e3b\u8981\u505a\u4ec0\u4e48\u54c1\u7c7b\"\n\nWORKFLOW: Standalone discovery entry point. get_product_categories \u2192 search_suppliers (with the product_type the user picks) OR analyze_market (for market depth on that category).\nRETURNS: { total_categories, province_filter, data: [{ category: \"T\u6064\", supplier_count: 523 }, ...] }\n\nEXAMPLES:\n\u2022 User: \"What product types does your database cover?\"\n \u2192 get_product_categories({})\n\u2022 User: \"What categories are Guangdong suppliers making?\"\n \u2192 get_product_categories({ province: \"Guangdong\" })\n\u2022 User: \"\u6d59\u6c5f\u4e3b\u8981\u751f\u4ea7\u4ec0\u4e48\u54c1\u7c7b\"\n \u2192 get_product_categories({ province: \"Zhejiang\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data array \u2192 the province has no verified suppliers with typed product_types. Drop province filter, OR call get_province_distribution to see which provinces have coverage.\n\u2022 Invalid province \u2192 use English (Guangdong) or Chinese (\u5e7f\u4e1c). normalizeProvince handles both.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this before every search \u2014 it's an exploratory tool. Do not use for geographic insight \u2014 use get_province_distribution.\n\nNOTE: Returns all categories ranked by supplier count, so the most available product types appear first. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5217\u51fa\u6570\u636e\u5e93\u4e2d\u6240\u6709\u54c1\u7c7b\u53ca\u5176\u4f9b\u5e94\u5546\u6570\u91cf\uff0c\u6309\u6570\u91cf\u6392\u5e8f\u3002\u53ef\u6309\u7701\u4efd\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"province": {
"description": "Filter by province (e.g. guangdong, \u5e7f\u4e1c)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_product_categories",
"title": "List Product Categories"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Show supplier distribution across Chinese provinces.\n\nUSE WHEN:\n- User asks \"where are factories located\" / \"which provinces\"\n- User needs to decide which region to source from\n- \"where's [product] manufacturing concentrated in China\"\n- \"top provinces for [category]\"\n- \"geographic heatmap of suppliers for [product]\"\n- \"is sportswear mostly in Fujian or Zhejiang\"\n- \"which cities lead denim production\"\n- \"follow-up: 'break it down by province'\"\n- \"\u54ea\u91cc\u6709\u5de5\u5382 / \u4f9b\u5e94\u5546\u5206\u5e03 / \u4ea7\u4e1a\u5206\u5e03 / \u5730\u57df\u5206\u5e03\"\n- \"[\u54c1\u7c7b] \u4e3b\u8981\u5728\u54ea\u51e0\u4e2a\u7701 / \u54ea\u4e2a\u7701\u6700\u96c6\u4e2d\"\n\nWORKFLOW: Standalone discovery tool. get_province_distribution \u2192 search_suppliers (with top province) OR search_clusters (for clusters within that province) OR analyze_market (deeper view).\nRETURNS: { total_provinces, data: [{ province, supplier_count, top_cities: [{ city, count }] }] }\n\nEXAMPLES:\n\u2022 User: \"Where are most Chinese apparel factories located?\"\n \u2192 get_province_distribution({})\n\u2022 User: \"Which provinces lead in sportswear manufacturing?\"\n \u2192 get_province_distribution({ product_type: \"sportswear\" })\n\u2022 User: \"\u725b\u4ed4\u5de5\u5382\u4e3b\u8981\u5206\u5e03\u5728\u54ea\"\n \u2192 get_province_distribution({ product_type: \"denim\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data for product_type \u2192 product_type keyword may not match. Try TYPO_MAP synonyms (tee\u2192t-shirt, jeans\u2192denim, \u8fd0\u52a8\u670d\u2192activewear) or drop the filter entirely.\n\u2022 Sparse results (< 3 provinces) \u2192 the product is niche. Try the parent category or broaden the term.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call for cluster-level granularity \u2014 use search_clusters. Do not call without product_type if user is asking about a specific category \u2014 the unfiltered output is generic.\n\nNOTE: Provinces are ranked by supplier count (Guangdong, Zhejiang, Jiangsu, Fujian typically lead). Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u6309\u7701\u4efd\u5c55\u793a\u4f9b\u5e94\u5546\u5206\u5e03\uff0c\u542b\u6bcf\u7701 Top \u57ce\u5e02\u3002\u53ef\u6309\u54c1\u7c7b\u7b5b\u9009\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"product_type": {
"description": "Filter by product type (e.g. sportswear, t-shirt, \u8fd0\u52a8\u670d)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_province_distribution",
"title": "Province Distribution"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Smart supplier recommendation based on sourcing requirements.\n\nUSE WHEN:\n- User describes what they need: \"I need a factory for cotton t-shirts in Guangdong\"\n- User asks for recommendations, not just search results\n- \"who's the best factory for [product]\"\n- \"recommend a top supplier for my [product] line\"\n- \"shortlist 5 suppliers for [product] in [province]\"\n- \"best own-factory (not broker) for [product]\"\n- \"give me the top [product] manufacturer\"\n- \"which factory should I go with for [product]\"\n- \"\u63a8\u8350\u4f9b\u5e94\u5546 / \u5e2e\u6211\u627e\u5408\u9002\u7684\u5de5\u5382 / \u6700\u597d\u7684 [\u54c1\u7c7b] \u5382\"\n- \"\u5e2e\u6211\u6392\u4e2a\u4f18\u5148\u7ea7 / \u63a8\u8350\u51e0\u5bb6\u6700\u597d\u7684\"\n- \"\u6211\u60f3\u505a [\u54c1\u7c7b]\uff0c\u7ed9\u6211\u63a8\u8350\u51e0\u5bb6\u5de5\u5382\"\n\nWORKFLOW: Entry point for \"I need help finding a supplier\" requests. recommend_suppliers \u2192 get_supplier_detail (vet top pick) OR compare_suppliers (evaluate top N side-by-side) OR check_compliance (verify export readiness of top pick) OR find_alternatives (expand the shortlist).\n\nDIFFERENCE from search_suppliers: search_suppliers FILTERS by exact criteria (province, type, capacity). This tool RANKS by fit \u2014 prioritizes own-factory, then quality score, then capacity.\nDIFFERENCE from find_alternatives: find_alternatives starts from a KNOWN supplier_id and finds similar ones. This tool starts from product REQUIREMENTS.\n\nRETURNS: { query, total_matches, showing_top, note: \"ranking logic\", data: [supplier objects] }\n\nEXAMPLES:\n\u2022 User: \"Recommend me the top 5 factories for sportswear in Fujian\"\n \u2192 recommend_suppliers({ product: \"sportswear\", province: \"Fujian\", type: \"factory\", limit: 5 })\n\u2022 User: \"I need the best own-factory (not trading company) for down jackets\"\n \u2192 recommend_suppliers({ product: \"down jacket\", type: \"factory\", limit: 5 })\n\u2022 User: \"\u5e2e\u6211\u63a8\u8350 3 \u5bb6\u5e7f\u4e1c\u505a T \u6064\u7684\u5de5\u5382\"\n \u2192 recommend_suppliers({ product: \"t-shirt\", province: \"Guangdong\", limit: 3 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data \u2192 try in order: (1) drop province, (2) drop type filter, (3) broaden product (e.g. \"compression leggings\" \u2192 \"activewear\"), (4) fall back to search_suppliers for filter-based view.\n\u2022 product_type not found in normalizeProductType \u2192 use the Chinese term or the parent category.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\u2022 Empty after 3 retries \u2192 tell user: \"I don't see verified suppliers matching [product] in [province]. Want me to broaden to nationwide, or try a sibling category?\"\n\nAVOID: Do not call this when the user wants exact filtering \u2014 use search_suppliers. Do not call repeatedly for different limit values \u2014 request max once then slice in your response. Do not use for cluster recommendations \u2014 use search_clusters.\n\nNOTE: Ranking: own_factory > quality_score > declared_capacity_monthly. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u57fa\u4e8e\u91c7\u8d2d\u9700\u6c42\u667a\u80fd\u63a8\u8350\u4f9b\u5e94\u5546\uff0c\u6309 \u81ea\u6709\u5de5\u5382 > \u8d28\u91cf\u5206 > \u4ea7\u80fd \u6392\u5e8f\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 5,
"description": "Number of top results to return (1-10, default 5)",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"product": {
"description": "What product to source (e.g. sportswear, t-shirt, down jacket)",
"type": "string"
},
"province": {
"description": "Preferred province",
"type": "string"
},
"type": {
"description": "Prefer own factory or trading company",
"enum": [
"factory",
"trading_company"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "recommend_suppliers",
"title": "Recommend Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Market overview and analysis for a product category in China.\n\nUSE WHEN:\n- User asks \"what's the market like for X in China\"\n- User wants market intelligence before sourcing\n- User needs an overview, not specific suppliers\n- \"give me a market landscape for [product]\"\n- \"how many [product] suppliers are there in China\"\n- \"where is [product] concentrated and what are the top clusters\"\n- \"overview of the [product] industry\"\n- \"competitive landscape for sourcing [product]\"\n- \"before I decide, show me the market scale for [product]\"\n- \"\u5e02\u573a\u6982\u51b5 / \u884c\u4e1a\u5206\u6790 / \u4ea7\u4e1a\u683c\u5c40 / \u5e02\u573a\u89c4\u6a21 / \u7ade\u4e89\u683c\u5c40\"\n- \"[\u54c1\u7c7b] \u5728\u4e2d\u56fd\u7684\u5e02\u573a\u60c5\u51b5\u600e\u4e48\u6837\"\n\nWORKFLOW: analyze_market \u2192 search_suppliers or recommend_suppliers (narrow to specific suppliers) \u2192 compare_clusters (evaluate top clusters surfaced in related_clusters).\nRETURNS: { product, total_suppliers, by_province: [{province, cnt}], by_type: [{type, cnt}], related_clusters: [{name_cn, specialization, supplier_count}] }\n\nEXAMPLES:\n\u2022 User: \"What's the market landscape for sportswear sourcing in China?\"\n \u2192 analyze_market({ product: \"sportswear\" })\n\u2022 User: \"Give me an overview of the Chinese denim supply chain\"\n \u2192 analyze_market({ product: \"denim\" })\n\u2022 User: \"\u7ae5\u88c5\u5e02\u573a\u5728\u4e2d\u56fd\u7684\u683c\u5c40\"\n \u2192 analyze_market({ product: \"\u7ae5\u88c5\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 total_suppliers = 0 \u2192 product keyword unmatched. Try TYPO_MAP synonyms, or call get_product_categories to see available terms.\n\u2022 by_province sparse (< 3 entries) \u2192 the product is niche or keyword too specific. Try the parent category.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call for a specific supplier shortlist \u2014 use recommend_suppliers. Do not call for cluster details \u2014 use search_clusters. Do not call repeatedly for different products in a loop \u2014 batch the analysis in your response.\n\nNOTE: Bird's-eye view. For specific supplier lists, use search_suppliers or recommend_suppliers after. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5355\u4e2a\u54c1\u7c7b\u7684\u5e02\u573a\u603b\u89c8\uff08\u603b\u4f9b\u5e94\u5546\u6570\u3001\u7701\u4efd\u5206\u5e03\u3001\u7c7b\u578b\u5206\u5e03\u3001\u76f8\u5173\u4ea7\u4e1a\u5e26\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"product": {
"description": "Product category to analyze (e.g. sportswear, denim, underwear)",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "analyze_market",
"title": "Analyze Market"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Estimate sourcing cost for a product based on fabric price, supplier pricing, and order quantity.\n\nUSE WHEN:\n- User asks \"how much would it cost to make 1000 t-shirts\"\n- User needs a rough cost breakdown for budgeting\n- \"ballpark cost to produce [quantity] [product] in China\"\n- \"budget estimate / sourcing cost / cost per piece for [product]\"\n- \"fabric cost + lead time estimate for [product]\"\n- \"how much to make [product] in [province]\"\n- \"rough quote / pricing range\"\n- \"can I make [product] for under $X per piece\"\n- \"\u591a\u5c11\u94b1 / \u6210\u672c\u4f30\u7b97 / \u62a5\u4ef7 / \u9884\u7b97 / \u505a\u4e00\u6279 [\u54c1\u7c7b] \u8981\u591a\u5c11\u94b1\"\n- \"[\u7701\u4efd] \u505a [\u54c1\u7c7b] \u7684\u6210\u672c\u5927\u6982\u591a\u5c11\"\n\nWORKFLOW: estimate_cost \u2192 optionally search_fabrics first to identify specific fabric_ids for accuracy \u2192 then recommend_suppliers for ready sources.\nRETURNS: { product, quantity, province, fabric_options: [{name, min_rmb, max_rmb, weight_gsm}], fabric_cost_per_meter, supplier_availability: { total_suppliers, avg_lead_time_days }, note }\n\nEXAMPLES:\n\u2022 User: \"Rough cost to make 1000 cotton t-shirts in Guangdong\"\n \u2192 estimate_cost({ product: \"t-shirt\", fabric_category: \"knit\", quantity: 1000, province: \"Guangdong\" })\n\u2022 User: \"What's the budget range for 5000 hoodies\"\n \u2192 estimate_cost({ product: \"hoodie\", quantity: 5000 })\n\u2022 User: \"\u505a 2000 \u4ef6\u7fbd\u7ed2\u670d\u5927\u6982\u591a\u5c11\u94b1\"\n \u2192 estimate_cost({ product: \"down jacket\", quantity: 2000 })\n\nERRORS & SELF-CORRECTION:\n\u2022 fabric_options empty \u2192 no matching fabrics for the product term. Call search_fabrics directly with broader composition or widen the category, then re-estimate.\n\u2022 supplier_availability.total_suppliers = 0 \u2192 drop province filter or broaden product term.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not present the output as a binding quote \u2014 always say \"estimate based on database averages, not binding\". Do not try to calculate per-piece cost from fabric alone \u2014 include labor, trim, margin externally. Do not use for detailed BOM costing \u2014 use search_fabrics + get_supplier_detail manually.\n\nCONSTRAINT: These are estimates based on database averages, NOT binding quotes. Always clarify this to the user. Fabric cost is per meter (typical usage: 1-3m per piece).\n\nNOTE: Cost accuracy improves when you provide a specific fabric_id via search_fabrics first. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u6309\u9762\u6599\u5747\u4ef7 + \u4f9b\u5e94\u5546\u4f9b\u8d27\u80fd\u529b\u4f30\u7b97 [\u54c1\u7c7b] \u7684\u751f\u4ea7\u6210\u672c\u533a\u95f4\u3002\u4ec5\u4f9b\u53c2\u8003\uff0c\u975e\u6b63\u5f0f\u62a5\u4ef7\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fabric_category": {
"description": "Fabric category: knit, woven, functional",
"type": "string"
},
"product": {
"description": "Product type (e.g. t-shirt, hoodie, down jacket)",
"type": "string"
},
"province": {
"description": "Preferred sourcing province",
"type": "string"
},
"quantity": {
"default": 1000,
"description": "Order quantity in pieces",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "estimate_cost",
"title": "Estimate Sourcing Cost"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Check if a supplier meets compliance requirements for a target export market.\n\nUSE WHEN:\n- User asks \"can this factory export to the US/EU/Japan\"\n- User needs to verify certifications for a specific market\n- \"UFLPA / Xinjiang cotton / REACH / JIS / KC check on sup_XXX\"\n- \"is [supplier] ready for EU CSDDD / Forced Labor Regulation\"\n- \"what's missing for sup_XXX to export to US\"\n- \"gap analysis / compliance dossier for [supplier] \u2192 [market]\"\n- \"does [supplier] meet Japan formaldehyde / azo dye rules\"\n- \"follow-up after get_supplier_detail: 'is this one US-ready?'\"\n- \"\u80fd\u4e0d\u80fd\u51fa\u53e3\u7f8e\u56fd / \u6b27\u76df / \u65e5\u672c / \u97e9\u56fd\"\n- \"\u5408\u89c4\u68c0\u67e5 / \u8ba4\u8bc1\u8981\u6c42 / \u51fa\u53e3\u8d44\u8d28 / \u5f3a\u5236\u6027\u6cd5\u89c4 / UFLPA \u5408\u89c4\"\n- \"[\u4f9b\u5e94\u5546] \u80fd\u5426\u6ee1\u8db3 [\u5e02\u573a] \u7684\u51c6\u5165\u8981\u6c42\"\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers, get_supplier_detail, or recommend_suppliers.\nWORKFLOW: search_suppliers \u2192 check_compliance \u2192 if issues exist, use find_alternatives to source compliant alternatives OR get_supplier_detail to see the full compliance fields and coverage.\nRETURNS: { supplier_id, company_name, target_market, overall_ready: boolean, passed: [string], issues: [string], certifications: [string], market_requirements: {field: value}, note }\n\nEXAMPLES:\n\u2022 User: \"Can sup_001 export to the US? Check UFLPA compliance\"\n \u2192 check_compliance({ supplier_id: \"sup_001\", target_market: \"us\" })\n\u2022 User: \"Is Texhong EU REACH compliant?\"\n \u2192 check_compliance({ supplier_id: \"sup_texhong_042\", target_market: \"eu\" })\n\u2022 User: \"sup_234 \u80fd\u51fa\u53e3\u65e5\u672c\u5417\"\n \u2192 check_compliance({ supplier_id: \"sup_234\", target_market: \"japan\" })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 supplier_id invalid. Re-run search_suppliers.\n\u2022 passed=[] AND issues=[\"No specific issues found, but data may be incomplete\"] \u2192 the supplier's compliance fields are mostly null. Interpret as UNKNOWN not COMPLIANT. Tell user: \"Compliance data incomplete \u2014 recommend verifying directly with the supplier.\"\n\u2022 overall_ready=false with many issues \u2192 use find_alternatives to find backup suppliers, OR search_suppliers with compliance_status=\"compliant\" to filter upfront.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this in a loop across all suppliers \u2014 instead pre-filter via search_suppliers({ compliance_status: \"compliant\" }). Do not treat missing fields as non-compliant \u2014 report them as \"not confirmed\". Do not use for general supplier info \u2014 use get_supplier_detail.\n\nNOTE: Many suppliers have incomplete compliance data. Missing data = \"not confirmed\", not \"non-compliant\". Source: MRC Data (meacheal.ai). Market requirements cover UFLPA/Xinjiang (US), REACH/CSDDD/Forced Labor Reg (EU), formaldehyde/azo/JIS (Japan), KC (Korea).\n\n\u4e2d\u6587\uff1a\u68c0\u67e5\u67d0\u4f9b\u5e94\u5546\u662f\u5426\u6ee1\u8db3\u76ee\u6807\u51fa\u53e3\u5e02\u573a\uff08\u7f8e/\u6b27/\u65e5/\u97e9\uff09\u7684\u5408\u89c4\u8981\u6c42\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_id": {
"description": "Supplier ID from search_suppliers, e.g. sup_001",
"type": "string"
},
"target_market": {
"description": "Target export market",
"enum": [
"us",
"eu",
"japan",
"korea"
],
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id",
"target_market"
],
"type": "object"
},
"name": "check_compliance",
"title": "Check Export Compliance"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Find alternative suppliers similar to a given supplier.\n\nUSE WHEN:\n- User says \"this supplier is too expensive / too slow / too far\"\n- User needs backup options for an existing supplier\n- \"give me backup options for sup_XXX\"\n- \"find 5 alternatives to [supplier] in a different province\"\n- \"we need a cheaper / faster / closer / higher-quality alternative to sup_XXX\"\n- \"diversify our supplier pool away from [supplier]\"\n- \"de-risk single-source on sup_XXX\"\n- \"follow-up after get_supplier_detail: 'who else could make this?'\"\n- \"\u6709\u6ca1\u6709\u66ff\u4ee3 / \u627e\u7c7b\u4f3c\u7684 / \u6362\u4e00\u5bb6 / \u5907\u9009\u4f9b\u5e94\u5546 / \u5206\u6563\u4f9b\u5e94\u94fe\"\n- \"[\u4f9b\u5e94\u5546] \u592a\u8d35\u4e86 / \u592a\u6162\u4e86\uff0c\u6362\u4e00\u5bb6\"\n- \"\u7ed9\u6211\u51e0\u4e2a\u5907\u7528\u5de5\u5382 / \u5907\u9009\u65b9\u6848\"\n\nFinds suppliers that make the same products, optionally in a different\nprovince or with different attributes. Results exclude the original supplier.\n\nPREREQUISITE: You MUST have a valid supplier_id from search_suppliers, get_supplier_detail, or recommend_suppliers.\nWORKFLOW: search_suppliers \u2192 identify a candidate \u2192 find_alternatives \u2192 compare_suppliers (evaluate alternatives side-by-side) OR check_compliance (vet each alternative for target market).\n\nDIFFERENCE from recommend_suppliers: recommend_suppliers starts from product REQUIREMENTS. This tool starts from a KNOWN supplier_id and finds similar alternatives.\nDIFFERENCE from search_suppliers: search_suppliers filters by criteria. This tool uses an existing supplier as the baseline reference.\n\nRETURNS: { original_supplier, reason, alternatives: [supplier summaries], attribution }\n\nEXAMPLES:\n\u2022 User: \"sup_001 is too slow. Find 5 faster alternatives\"\n \u2192 find_alternatives({ supplier_id: \"sup_001\", reason: \"faster\", limit: 5 })\n\u2022 User: \"Give me cheaper backup options for sup_042 in Zhejiang\"\n \u2192 find_alternatives({ supplier_id: \"sup_042\", reason: \"cheaper\", province: \"Zhejiang\", limit: 5 })\n\u2022 User: \"sup_123 \u8d28\u91cf\u4e0d\u884c\uff0c\u63a8\u8350\u51e0\u5bb6\u8d28\u91cf\u66f4\u597d\u7684\"\n \u2192 find_alternatives({ supplier_id: \"sup_123\", reason: \"better_quality\", limit: 5 })\n\nERRORS & SELF-CORRECTION:\n\u2022 \"Supplier not found\" \u2192 supplier_id invalid. Re-run search_suppliers.\n\u2022 \"Original supplier has no product types listed\" \u2192 the reference supplier has no product_types field. Use recommend_suppliers with the product category the user actually wants instead.\n\u2022 Empty alternatives \u2192 the product type is rare OR province filter is too narrow. Drop province filter first, then try broader product search via recommend_suppliers.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this without first knowing the user's complaint (cheaper/faster/closer/quality) \u2014 without reason, results are generic. Do not call to find a supplier from scratch \u2014 use recommend_suppliers or search_suppliers. Do not compare via this tool \u2014 use compare_suppliers after.\n\nCONSTRAINT: Max 10 alternatives per call. Query matches up to 3 product types from the reference supplier.\n\nNOTE: Source: MRC Data (meacheal.ai). Sorting: \"faster\" uses lead_time_days.bulk_min ASC; others use quality_score DESC.\n\n\u4e2d\u6587\uff1a\u57fa\u4e8e\u5df2\u77e5 supplier_id \u67e5\u627e\u540c\u54c1\u7c7b\u7684\u5907\u9009\u4f9b\u5e94\u5546\uff08\u652f\u6301\u6309 \u4fbf\u5b9c/\u5feb/\u8fd1/\u8d28\u91cf \u6392\u5e8f\uff0c\u53ef\u9650\u5b9a\u7701\u4efd\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 5,
"description": "Number of top results to return (1-10, default 5)",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"province": {
"description": "Preferred province for alternatives",
"type": "string"
},
"reason": {
"default": "any",
"description": "Why looking for alternatives",
"enum": [
"cheaper",
"faster",
"closer",
"better_quality",
"any"
],
"type": "string"
},
"supplier_id": {
"description": "Current supplier ID to find alternatives for",
"type": "string"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_id"
],
"type": "object"
},
"name": "find_alternatives",
"title": "Find Alternative Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Compare multiple suppliers side by side on all dimensions.\n\nUSE WHEN user asks:\n- \"compare these 3 factories\"\n- \"which supplier is better between X and Y\"\n- \"benchmark sup_001 vs sup_002 vs sup_003\"\n- \"side-by-side: capacity, certifications, quality score\"\n- \"rank these 5 suppliers by [dimension]\"\n- \"evaluate my shortlist\"\n- \"which of [supplier list] has the highest verified capacity\"\n- \"follow-up after recommend_suppliers: 'compare the top 3'\"\n- \"\u5bf9\u6bd4 [\u4f9b\u5e94\u5546 A] \u548c [\u4f9b\u5e94\u5546 B] / \u5bf9\u6bd4\u4f9b\u5e94\u5546 / \u4f9b\u5e94\u5546\u6a2a\u8bc4\"\n- \"\u54ea\u5bb6\u6700\u597d / \u6a2a\u5411\u8bc4\u4f30 / \u6bd4\u8f83\u8fd9\u51e0\u5bb6\"\n\nPREREQUISITE: You MUST have valid supplier_ids from search_suppliers, recommend_suppliers, find_alternatives, or get_cluster_suppliers. Do not guess IDs.\nWORKFLOW: search_suppliers/recommend_suppliers \u2192 collect supplier_ids \u2192 compare_suppliers \u2192 optionally check_compliance (verify top picks for target market) OR find_alternatives (expand the shortlist).\n\nDIFFERENCE from get_supplier_detail: This returns multiple suppliers at once for comparison. get_supplier_detail returns one with verified_dimensions breakdown.\n\nRETURNS: { count, data: [full supplier profiles with all fields] }\n\nEXAMPLES:\n\u2022 User: \"Compare sup_001, sup_002, sup_003 for me\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_001\", \"sup_002\", \"sup_003\"] })\n\u2022 User: \"Benchmark the top 5 you just recommended\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_A\", \"sup_B\", \"sup_C\", \"sup_D\", \"sup_E\"] })\n\u2022 User: \"\u6a2a\u5411\u5bf9\u6bd4 sup_100\u3001sup_200\u3001sup_300\"\n \u2192 compare_suppliers({ supplier_ids: [\"sup_100\", \"sup_200\", \"sup_300\"] })\n\nERRORS & SELF-CORRECTION:\n\u2022 Fewer results than IDs sent \u2192 missing IDs were silently skipped (invalid supplier_id). Re-run search_suppliers to verify.\n\u2022 count=0 \u2192 all IDs invalid. Re-run search_suppliers.\n\u2022 \"Too many IDs\" \u2192 split into batches of 10.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not loop get_supplier_detail \u2014 always use compare_suppliers when you have 2+ IDs. Do not pass more than 10 IDs. Do not use to find new suppliers \u2014 use search_suppliers or recommend_suppliers first.\n\nCONSTRAINT: Max 10 supplier IDs per call.\n\nNOTE: Source: MRC Data (meacheal.ai). Returns full 60+ field profile per supplier.\n\n\u4e2d\u6587\uff1a\u6a2a\u5411\u5bf9\u6bd4\u591a\u4e2a\u4f9b\u5e94\u5546\u7684\u5168\u90e8\u5b57\u6bb5\uff08\u6700\u591a 10 \u4e2a ID\uff09\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"supplier_ids": {
"description": "Array of supplier IDs from search_suppliers, e.g. ['sup_001', 'sup_002'], max 10",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"supplier_ids"
],
"type": "object"
},
"name": "compare_suppliers",
"title": "Compare Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List all suppliers in a specific industrial cluster.\n\nUSE WHEN user asks:\n- \"what factories are in Humen cluster\"\n- \"show me suppliers in Keqiao fabric market\"\n- \"list all womenswear factories in [cluster]\"\n- \"top-quality suppliers in [cluster]\"\n- \"factory directory for [cluster]\"\n- \"page through suppliers in Shengze silk cluster\" (pagination)\n- \"follow-up after search_clusters: 'show me the factories there'\"\n- \"\u864e\u95e8\u4ea7\u4e1a\u5e26\u6709\u54ea\u4e9b\u4f9b\u5e94\u5546 / [\u4ea7\u4e1a\u5e26] \u7684\u5de5\u5382\u5217\u8868\"\n- \"[\u96c6\u7fa4] \u91cc\u6700\u597d\u7684\u51e0\u5bb6\u5de5\u5382\"\n\nPREREQUISITE: You MUST have a valid cluster_id from search_clusters.\nWORKFLOW: search_clusters \u2192 pick cluster_id \u2192 get_cluster_suppliers \u2192 optionally get_supplier_detail (vet top-ranked factory) OR compare_suppliers (evaluate top 3-10 factories in the cluster).\nRETURNS: { cluster_id, has_more, data: [supplier summary objects sorted by quality_score DESC] }\n\nEXAMPLES:\n\u2022 User: \"What factories are in the Humen womenswear cluster?\"\n \u2192 get_cluster_suppliers({ cluster_id: \"humen_women\", limit: 20 })\n\u2022 User: \"Show me the top 10 factories in Jinjiang sportswear cluster\"\n \u2192 get_cluster_suppliers({ cluster_id: \"jinjiang_sportswear\", limit: 10 })\n\u2022 User: \"\u864e\u95e8\u6709\u54ea\u4e9b\u670d\u88c5\u5382\uff0c\u5206\u9875\u770b\u7b2c\u4e8c\u9875\"\n \u2192 get_cluster_suppliers({ cluster_id: \"humen_women\", limit: 20, offset: 20 })\n\nERRORS & SELF-CORRECTION:\n\u2022 Empty data \u2192 either (a) cluster has no mapped suppliers (try compare_clusters to see supplier_count), or (b) cluster_id invalid. Re-run search_clusters.\n\u2022 cluster_id unknown \u2192 search_clusters({ specialization: \"...\" }) returns cluster_id values.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not guess cluster_ids \u2014 always resolve via search_clusters. Do not use this to find suppliers globally \u2014 use search_suppliers. Do not iterate clusters in a loop \u2014 use compare_clusters.\n\nNOTE: Sorted by quality_score DESC. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u5217\u51fa\u67d0\u4ea7\u4e1a\u5e26\u5185\u6240\u6709\u4f9b\u5e94\u5546\uff0c\u6309\u8d28\u91cf\u8bc4\u5206\u6392\u5e8f\u3002\u5206\u9875\u6700\u591a 50 \u6761/\u9875\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cluster_id": {
"description": "Cluster ID from search_clusters, e.g. humen_women, keqiao_fabric, shishi_casual",
"type": "string"
},
"limit": {
"default": 20,
"description": "Page size: number of records to return (1-50, default 20)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Pagination offset: skip this many records before returning results (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"required": [
"cluster_id"
],
"type": "object"
},
"name": "get_cluster_suppliers",
"title": "Get Cluster's Suppliers"
},
{
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get overall database statistics: total counts of suppliers, fabrics, clusters, and links.\n\nUSE WHEN user asks:\n- \"how big is your database\" / \"what's the coverage\" / \"data overview\"\n- \"how many suppliers / fabrics / clusters do you have\"\n- \"database size / scale / freshness\"\n- \"is the data up to date\"\n- \"live counts for MRC data\"\n- \"first-time onboarding: 'what can MRC data do for me'\"\n- \"\u6570\u636e\u5e93\u591a\u5927 / \u6709\u591a\u5c11\u6570\u636e / \u8986\u76d6\u591a\u5c11\u4f9b\u5e94\u5546\"\n- \"\u4f60\u4eec\u7684\u6570\u636e\u89c4\u6a21 / \u6570\u636e\u91cf / \u65b0\u9c9c\u5ea6\"\n\nWORKFLOW: Standalone discovery tool \u2014 call this first when a user asks about data scale or freshness. Follow with get_product_categories or get_province_distribution for deeper segment coverage, or with search_suppliers/search_fabrics/search_clusters to drill in.\n\nDIFFERENCE from database-overview resource (mrc://overview): This is dynamic (live counts + generated_at). The resource is static (geographic scope, top provinces, data standards).\n\nRETURNS: { database, generated_at, tables: { suppliers: { total }, fabrics: { total }, clusters: { total }, supplier_fabrics: { total } }, attribution }\n\nEXAMPLES:\n\u2022 User: \"How big is the MRC database?\"\n \u2192 get_stats({})\n\u2022 User: \"Give me the latest data scale numbers\"\n \u2192 get_stats({})\n\u2022 User: \"MRC \u6570\u636e\u5e93\u6709\u591a\u5c11\u4f9b\u5e94\u5546\u548c\u9762\u6599\"\n \u2192 get_stats({})\n\nERRORS & SELF-CORRECTION:\n\u2022 All counts 0 \u2192 database query failed or D1 binding lost. Retry once after 5 seconds. If still 0, surface a transport error to user.\n\u2022 Rate limit 429 \u2192 wait 60 seconds; do not retry immediately.\n\nAVOID: Do not call this before every tool \u2014 only when user explicitly asks about scale. Do not call to get per-category counts \u2014 use get_product_categories. Do not call to get geographic scope metadata \u2014 use the database-overview resource (mrc://overview) which is static.\n\nNOTE: Only reports verified + partially_verified records. Unverified reserve data is excluded from counts. Source: MRC Data (meacheal.ai).\n\n\u4e2d\u6587\uff1a\u83b7\u53d6\u6570\u636e\u5e93\u6574\u4f53\u7edf\u8ba1\uff08\u4f9b\u5e94\u5546\u603b\u6570\u3001\u9762\u6599\u603b\u6570\u3001\u4ea7\u4e1a\u5e26\u603b\u6570\u3001\u5173\u8054\u8bb0\u5f55\u6570\uff09\u3002\u52a8\u6001\u5feb\u7167\uff0c\u542b\u751f\u6210\u65f6\u95f4\u6233\u3002",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"verbose_hints": {
"description": "If true, response includes _interpretation annotations explaining what the data means and _guidance on how to use it",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_stats",
"title": "Get Database Stats"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": 401,
"expired_session_error": null,
"expired_session_status_code": 200,
"issues": [
"missing_protocol_header",
"bad_protocol_not_rejected",
"delete_session_unexpected",
"expired_session_not_404"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": true,
"transport": "streamable-http"
}
},
"remote_url": "https://api.meacheal.ai/mcp",
"server_card_payload": {
"authentication": {
"description": "Get a free API key at https://api.meacheal.ai/apply",
"type": "bearer"
},
"contact": "api@meacheal.ai",
"description": "The first and only MCP server providing structured Chinese fashion supply chain intelligence for AI platforms. No equivalent data source exists in the MCP ecosystem. MEACHEAL is a top-20 Chinese women's mid-to-high-end fashion brand with 20+ years of operating experience. Our database covers millions of Chinese apparel supply chain entities \u2014 of which 3,000+ manufacturers, 350+ fabrics, and 170+ industrial clusters have been independently verified with 63+ dimensions per record (capacity, compliance, certifications, export qualifications) and AATCC/ISO/GB lab test reports. Via API and a dedicated apparel industry AI Agent, we serve every apparel-related scenario \u2014 brands, factories, trading, sourcing, retail, design, AI platforms \u2014 regardless of role.",
"documentation": "https://api.meacheal.ai/docs",
"homepage": "https://api.meacheal.ai",
"name": "MRC Data",
"prompts": [
{
"description": "Find apparel suppliers by product type and location",
"name": "find-supplier"
},
{
"description": "Find fabrics by material and use case",
"name": "find-fabric"
},
{
"description": "Compare Chinese apparel industrial clusters",
"name": "compare-clusters"
}
],
"resources": [
{
"description": "Database coverage summary",
"name": "database-overview",
"uri": "mrc://overview"
}
],
"tools": [
{
"description": "Search verified Chinese apparel manufacturers by location, type, capacity, compliance, and quality",
"name": "search_suppliers"
},
{
"description": "Get full supplier profile (50+ fields) by ID",
"name": "get_supplier_detail"
},
{
"description": "Search fabric database with lab-tested specifications",
"name": "search_fabrics"
},
{
"description": "Get full fabric record with AATCC/ISO/GB lab-test data",
"name": "get_fabric_detail"
},
{
"description": "Search Chinese apparel industrial clusters and fabric markets",
"name": "search_clusters"
},
{
"description": "Compare multiple industrial clusters side-by-side",
"name": "compare_clusters"
},
{
"description": "Surface specs that deviate from lab-test results",
"name": "detect_discrepancy"
},
{
"description": "List all fabrics a supplier can provide with pricing",
"name": "get_supplier_fabrics"
},
{
"description": "List all suppliers offering a specific fabric",
"name": "get_fabric_suppliers"
},
{
"description": "List all product categories with supplier counts",
"name": "get_product_categories"
},
{
"description": "Show supplier distribution across provinces",
"name": "get_province_distribution"
},
{
"description": "Smart supplier recommendation by sourcing requirements",
"name": "recommend_suppliers"
},
{
"description": "Market overview for a product category in China",
"name": "analyze_market"
},
{
"description": "Estimate sourcing cost based on fabric and supplier data",
"name": "estimate_cost"
},
{
"description": "Check supplier compliance for US/EU/Japan/Korea markets",
"name": "check_compliance"
},
{
"description": "Find alternative suppliers similar to a given one",
"name": "find_alternatives"
},
{
"description": "Compare multiple suppliers side-by-side",
"name": "compare_suppliers"
},
{
"description": "List all suppliers in a specific industrial cluster",
"name": "get_cluster_suppliers"
},
{
"description": "Get database statistics: supplier, fabric, cluster counts",
"name": "get_stats"
}
],
"transport": "streamable-http",
"url": "https://api.meacheal.ai/mcp",
"version": "2.2.2"
},
"server_identifier": "ai.meacheal/mrc-data"
}
Known versions
2.2.2
Validation history
7 day score delta
n/a
30 day score delta
n/a
Recent healthy ratio
0%
Freshness
0.1h
| Timestamp | Status | Score | Latency | Tools |
|---|---|---|---|---|
| May 04, 2026 03:07:50 AM UTC | Failing | 57.2 | 6935.3 ms | 0 |
| May 04, 2026 02:59:10 AM UTC | Failing | 57.2 | 2713.4 ms | 0 |
| May 04, 2026 02:52:18 AM UTC | Failing | 57.2 | 3869.2 ms | 0 |
| May 04, 2026 02:47:46 AM UTC | Failing | 57.2 | 3986.6 ms | 0 |
| May 04, 2026 02:32:58 AM UTC | Failing | 57.2 | 7546.0 ms | 0 |
| May 04, 2026 02:27:34 AM UTC | Failing | 57.2 | 6662.5 ms | 0 |
| May 04, 2026 02:22:43 AM UTC | Failing | 57.2 | 6716.9 ms | 0 |
| May 04, 2026 02:03:51 AM UTC | Failing | 57.2 | 3622.7 ms | 0 |
Validation timeline
| Validated | Summary | Score | Protocol | Auth mode | Tools | High-risk tools | Changes |
|---|---|---|---|---|---|---|---|
| May 04, 2026 03:07:50 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 02:59:10 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 02:52:18 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 02:47:46 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 02:32:58 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 02:27:34 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 02:22:43 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 02:03:51 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 01:56:02 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 01:50:52 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 01:40:08 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
| May 04, 2026 01:36:10 AM UTC | Failing | 57.2 | 2025-03-26 | public | 0 | 0 | none |
Recent validation runs
| Started | Status | Summary | Latency | Checks |
|---|---|---|---|---|
| May 04, 2026 03:07:43 AM UTC | Completed | Failing | 6935.3 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 02:59:08 AM UTC | Completed | Failing | 2713.4 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 02:52:14 AM UTC | Completed | Failing | 3869.2 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 02:47:42 AM UTC | Completed | Failing | 3986.6 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 02:32:50 AM UTC | Completed | Failing | 7546.0 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 02:27:27 AM UTC | Completed | Failing | 6662.5 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 02:22:37 AM UTC | Completed | Failing | 6716.9 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 02:03:47 AM UTC | Completed | Failing | 3622.7 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 01:56:01 AM UTC | Completed | Failing | 1650.5 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| May 04, 2026 01:50:50 AM UTC | Completed | Failing | 2428.8 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |