Skip to main content
Glama
quickman924

plushsource-mcp

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

MANUFACTURERS.md

The manufacturer list as a table, grouped by country.

data/manufacturers.csv

The source data. Edit this in a pull request.

data/manufacturers.json

The same data as JSON, generated from the CSV.

src/

The plushsource-mcp MCP server (TypeScript).

server.json

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-mcp

The 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

search_manufacturers

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.

get_manufacturer

Every fact for one manufacturer, plus the link to its written profile on PlushSource.

compare_manufacturers

Two to five manufacturers side by side. Unknown slugs are reported in missing.

get_facets

Countries, categories, certifications, products, design inputs, industries and MOQ bands, with counts. Call it before filtering.

get_dataset_info

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.

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:

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 stdio

To try a local build in an MCP client, point command at node and args at the absolute path of dist/index.js.

Licences

Manufacturer names and trademarks belong to their owners.

Available Tools

5 tools
compare_manufacturersCompare manufacturersA
Read-only

Return 2-5 records side by side for a sourcing decision. Unknown slugs are reported in missing instead of failing the whole call.

NameRequiredDescriptionDefault
slugsYes2-5 listing slugs from search_manufacturers.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 infoA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 filtersA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 manufacturerA
Read-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.

NameRequiredDescriptionDefault
slugYesListing slug, as returned by search_manufacturers.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 manufacturersA
Read-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.

NameRequiredDescriptionDefault
odmNotrue requires the manufacturer to state ODM service.
oemNotrue requires the manufacturer to state OEM service.
limitNo
queryNoFree text, for example 'mascot plush Vietnam' or 'low MOQ keychains'.
offsetNo
countryNo
moq_maxNoMaximum published MOQ, in pieces.
moq_minNoMinimum published MOQ, in pieces.
categoryNo
productsNo
industriesNo
design_inputsNo
certificationsNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updates
    • First observedcompare_manufacturers
    • First observedget_dataset_info
    • First observedget_facets
    • First observedget_manufacturer
    • First observedsearch_manufacturers

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

Five tools is well-scoped for a read-only manufacturer directory. Each tool earns its place and no unnecessary surface is exposed.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    3
    36 PyPI
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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