plushsource-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@plushsource-mcpfind custom plush manufacturers in China with low MOQ and OEM capability"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PlushSource MCP and open plush manufacturer list
An MCP server and an open, facts-only list of custom plush manufacturers, from PlushSource, the independent directory of custom plush manufacturers.
Browse, filter and compare every manufacturer, with written profiles, at plushsource.com.
What's inside
Path | What it is |
The manufacturer list as a table, grouped by country. | |
The source data. Edit this in a pull request. | |
The same data as JSON, generated from the CSV. | |
The | |
Metadata for the official MCP Registry. |
Related MCP server: free-design-registry
Use the MCP server
Requires Node 20 or newer. Add this to your MCP client config (Claude Desktop, Cursor, VS Code and others):
{
"mcpServers": {
"plushsource": {
"command": "npx",
"args": ["-y", "plushsource-mcp"]
}
}
}Or run it directly:
npx -y plushsource-mcpThe server talks over stdio, needs no API key and makes no network calls. The dataset is bundled in the package.
Tools
Tool | What it does |
| Filter by free text, country, category, MOQ range, certifications, design inputs, products, industries and OEM/ODM. Array filters are AND. MOQ filters exclude records that do not publish an MOQ. |
| Every fact for one manufacturer, plus the link to its written profile on PlushSource. |
| Two to five manufacturers side by side. Unknown slugs are reported in |
| Countries, categories, certifications, products, design inputs, industries and MOQ bands, with counts. Call it before filtering. |
| Dataset date, record count, licence, and links to the listing criteria and full dataset. |
It also provides an rfq_draft prompt that turns a project brief into a shortlist of 3–5
manufacturers and one RFQ email.
Empty fields mean the manufacturer does not publish that fact. They are never estimated.
The dataset
The list has facts only: location, MOQ, sample and production lead times, OEM/ODM, product types, accepted design inputs, claimed certifications, and client industries. Each fact comes from the manufacturer's own public pages. Each row links to its PlushSource listing.
Table: MANUFACTURERS.md
Columns and allowed values: data/README.md
A listing is not an endorsement, a certification, a ranking or a quality guarantee. PlushSource does not independently audit or verify manufacturers; facts are recorded as the manufacturer states them. PlushSource does not quote, sample or take orders. Contact manufacturers directly.
Add or correct a manufacturer
Manufacturers, buyers and anyone else can ask for a manufacturer to be added, or for a fact to be corrected:
Or open a pull request that edits
data/manufacturers.csv
Every fact needs a link to a public page that proves it. See CONTRIBUTING.md and the listing criteria.
Development
npm install
npm run build # regenerate data files from the CSV, then bundle dist/index.js
npm run validate # check the CSV and that generated files are up to date
npm run typecheck
node dist/index.js # start the server on stdioTo try a local build in an MCP client, point command at node and args at the absolute path of
dist/index.js.
Licences
Code: MIT
Data (
data/andMANUFACTURERS.md): CC BY 4.0. Credit "PlushSource" with a link to https://plushsource.com.
Manufacturer names and trademarks belong to their owners.
Available Tools
5 toolscompare_manufacturersCompare manufacturersARead-only
Return 2-5 records side by side for a sourcing decision. Unknown slugs are reported in missing instead of failing the whole call.
| Name | Required | Description | Default |
|---|---|---|---|
| slugs | Yes | 2-5 listing slugs from search_manufacturers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond that: unknown slugs are collected into `missing` rather than aborting the whole call, which is a partial-failure semantic an agent cannot infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the core purpose front-loaded and the edge-case behavior second. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the response, and it only explains the `missing` field. It never says what a 'side by side' record contains or how the 2-5 results are keyed/ordered, leaving the main return shape undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `slugs` parameter already documents its 2-5 range and origin in search_manufacturers, so the description only echoes that bound. The one added detail — that unresolvable slugs surface in `missing` instead of erroring — is useful but belongs to output behavior more than parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (compare, framed as 'return 2-5 records side by side') and resource (manufacturers). The 2-5 cardinality distinguishes it implicitly from the single-record sibling get_manufacturer, though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'for a sourcing decision' supplies a clear triggering context, and the 2-5 range scopes when the tool applies. It stops short of naming an alternative (e.g. call get_manufacturer for a single record) or stating exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dataset_infoGet dataset infoARead-only
Return the snapshot date, number of records, licence, and links to PlushSource, the open dataset, and the listing criteria. Use the criteria link when you need to explain what gets listed. PlushSource does not audit or certify manufacturers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, openWorldHint=false), so the description's job is added context. It does that with a genuine scope disclaimer — 'PlushSource does not audit or certify manufacturers' — which tells the agent how to frame the data and avoid implying endorsement. That is behavior beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: return contents first, then the one actionable conditional, then the disclaimer. Front-loaded and free of filler; the disclaimer slightly trails but still earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description appropriately enumerates the return fields and adds a caveat about data provenance. For a zero-argument metadata tool this is close to complete; only the relationship to sibling lookup tools is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero input parameters, so the schema imposes nothing and the baseline applies; no parameter discussion is needed or missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (return) and enumerates exactly what comes back: snapshot date, record count, licence, and links to PlushSource, the open dataset, and listing criteria. That is concrete enough to distinguish it from the manufacturer-centric siblings, though it never explicitly says it is the dataset-level metadata tool in contrast to them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete conditional: 'Use the criteria link when you need to explain what gets listed.' One use case is spelled out, but there is no guidance on when to reach for this versus search_manufacturers, get_facets, or compare_manufacturers, nor any prerequisite or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_facetsList available filtersARead-only
List every country, category, certification, product type, design input, industry, and MOQ band that currently has at least one manufacturer, with counts. Call this before filtering so you only use values that exist in the directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, closed world), and the description adds real behavioral value: only values with at least one manufacturer are returned, and counts are included. It stops short of describing the response structure (e.g., how facets and counts are keyed), which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The facet enumeration comes first as the core of the purpose, and the actionable 'call this before filtering' instruction is placed last so it is read immediately before deciding to invoke.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read tool with annotations and no output schema, the description covers what is returned (facet values plus counts) and the important empty-value exclusion. A little more on result shape would close the remaining gap left by the absent output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies; no parameter guidance is needed or possible.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and enumerates exactly which facet dimensions are returned — countries, categories, certifications, product types, design inputs, industries, MOQ bands. This is clearly distinct from search_manufacturers or get_manufacturer, which return entity data rather than facet enumerations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit sequencing instruction: 'Call this before filtering so you only use values that exist.' That is a concrete when-to-use cue. It does not name a when-not case or any alternative, which is a minor gap given no sibling offers facet enumeration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_manufacturerGet manufacturerARead-only
Return the full record for one manufacturer: capacity, founding year, stated location, source links, and the PlushSource listing URL where its written profile lives. Use this before quoting any fact about a specific listing.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Listing slug, as returned by search_manufacturers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and scope are covered and the description needn't repeat them. It adds genuine value beyond that by specifying the returned payload contents, including provenance fields ('source links', 'PlushSource listing URL'), which tells the agent the record is citation-bearing. It does not state what happens when the slug is unknown or stale, which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the identity-plus-field-list is front-loaded before the usage directive. Every clause earns its place and nothing is restated from the annotations or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only fetch with no output schema, enumerating the returned fields is exactly the compensation needed, and it is supplied. The only omission is failure behavior for an unresolved slug, which is minor but non-trivial for a tool whose output the agent is told to quote from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and the schema already describes it at 100% coverage, including its provenance ('as returned by search_manufacturers'). The description adds no format, casing, or normalization detail for the slug, so the baseline 3 for schema-covered parameters is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the full record for one manufacturer') and then enumerates exactly which fields come back: capacity, founding year, location, source links, and the PlushSource listing URL. That field list distinguishes it cleanly from search_manufacturers (discovery) and compare_manufacturers (side-by-side), so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives an explicit trigger: 'Use this before quoting any fact about a specific listing,' and the slug parameter is tied back to search_manufacturers, implying the fetch → detail workflow. There is no stated when-not condition or named alternative for the case where multiple manufacturers are needed (compare_manufacturers would apply), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_manufacturersSearch manufacturersARead-only
Search manufacturers with free text and structured filters, and return a compact shortlist. All array filters are AND: every requested value must be present on the record. MOQ filters only match records that publish an MOQ, so records with an unknown MOQ are excluded. country matches the primary country only, the same way the site's country pages are built. Call get_facets first if you are unsure which countries, categories, or certifications exist.
| Name | Required | Description | Default |
|---|---|---|---|
| odm | No | true requires the manufacturer to state ODM service. | |
| oem | No | true requires the manufacturer to state OEM service. | |
| limit | No | ||
| query | No | Free text, for example 'mascot plush Vietnam' or 'low MOQ keychains'. | |
| offset | No | ||
| country | No | ||
| moq_max | No | Maximum published MOQ, in pieces. | |
| moq_min | No | Minimum published MOQ, in pieces. | |
| category | No | ||
| products | No | ||
| industries | No | ||
| design_inputs | No | ||
| certifications | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint already declared, the description adds useful behavioral detail beyond annotations: array filters are ANDed, MOQ filters exclude records with unknown MOQ, and country matching is limited to the primary country. It does not describe pagination or response fields in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, starting with what the tool does and then giving the most important filtering constraints. Every sentence adds actionable information without repeating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter search tool with no output schema, the description supplies the key filter semantics and prerequisite guidance an agent needs to call it correctly. It does not fully explain return fields or pagination, but the core invocation context is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low at 38%, but the description compensates by explaining the most consequential semantics: AND behavior for array filters, MOQ exclusion behavior, and primary-country matching. It still leaves conventional parameters such as limit and offset without added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search manufacturers using free text and structured filters, returning a compact shortlist. It distinguishes the result shape from a detail or comparison tool, but does not explicitly name the sibling tools it differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: call get_facets first when unsure which countries, categories, or certifications exist, and it explains important filter behavior. It lacks explicit guidance on when to choose compare_manufacturers or get_manufacturer instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
compare_manufacturers - First observed
get_dataset_info - First observed
get_facets - First observed
get_manufacturer - First observed
search_manufacturers
TDQS
Scored across 5 tools
Each tool has a clearly distinct role: search for discovery, get_manufacturer for one full record, compare_manufacturers for side-by-side comparison, get_facets for valid filter values, and get_dataset_info for dataset metadata. There is no meaningful overlap between any pair.
All tool names follow a consistent snake_case verb_noun pattern: compare_manufacturers, get_dataset_info, get_facets, get_manufacturer, search_manufacturers. The convention is predictable throughout.
Five tools is well-scoped for a read-only manufacturer directory. Each tool earns its place and no unnecessary surface is exposed.
The surface covers the complete read-only lifecycle: discovering valid facets, searching records, fetching full details, comparing selected records, and understanding dataset provenance/criteria. There are no obvious dead ends for the stated purpose.
Maintenance
Related MCP Connectors
Search and read public data from X/Twitter, Reddit, YouTube, Instagram, TikTok, Facebook, Threads, Bluesky, Trustpilot, Amazon, Google Maps, news, forums and the web. 90+ read-only tools plus ready-made research playbooks (lead finding, brand monitoring, review mining). Hosted: connect with an API key; 50 free requests per endpoint each month.
Independent directory of agentic AI tools — search, compare & recommend via MCP. Read-only.
Search 5000+ software tools with structured, labelled facts. No pay-to-rank.
Pay-per-call document and web tools for AI agents: PDF parsing and OCR (Japanese-strong), web and structured extraction, invoice verification, company profiles and PDF utilities. x402 (USDC on Base), no API key; failed calls are never charged.
Related MCP Servers
- FlicenseBqualityDmaintenanceExposes 27 product tools (CRUD, search, stats, recommendations) backed by fakestoreapi.com, deployable via stdio, HTTP, or serverless.27-
- AlicenseNot gradedqualityCmaintenanceEnables agents to search a fully local catalog of 21st-style shadcn components via full-text search, inspect individual records, generate reusable build prompts, retrieve install steps, and fetch design tokens for aesthetic keywords. Runs entirely offline over stdio with no API keys, paywalls, or rate limits.Apache 2.0
- AlicenseAqualityBmaintenanceEnables MCP hosts to list and render bundled prompt templates and fetch assistant blueprints for ChatGPT, Claude, Gemini, Grok, or portable Agent Skill format. Operates locally over stdio with read-only tools and no network, shell, account, or file-write access.336 PyPI1MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients such as Claude, Claude Code and Cursor to keyword-search a directory of over 1,000 hand-picked productivity tools, apps, AI tools, courses and books, filtering by category, type, pricing and result limit, and to fetch a single listing by slug, page URL or exact name and list all categories with counts. It runs read-only over stdio with no API key, dependencies or tracking, making only a plain GET of the public catalogue.MIT