Skip to main content
Glama
gpaul-mcp

Ravelry MCP Server

by gpaul-mcp

Ravelry MCP Server

A Model Context Protocol server that turns AI assistants into a knitting and crochet companion, with Ravelry as the backbone: pattern and yarn search with a photo carousel, your stash, queue and projects, exact calculators, and a row counter.

CI MCP SDK v2 Node.js 22+

This project was inspired by my girlfriend, whose passion for knitting and crochet encouraged me to create this bridge between AI assistants and the Ravelry crafting community. Since she's not very tech-savvy and somewhat skeptical about AI, this serves as my way of connecting with her interests and showing how technology can enhance her crafting experience rather than replace it.

Use it now: no installation

A hosted instance is running at:

https://ravelry-mcp.gonz-paul.dev/mcp

You don't need a Ravelry account or API key: add the URL to your AI assistant and start asking.

Claude (web, desktop and mobile): Settings → Connectors → Add custom connector, give it a name ("Ravelry") and paste the URL. Once added, it is available everywhere you use Claude.

ChatGPT: add the URL as a custom MCP connector (developer mode), with no authentication.

Claude Code

claude mcp add --transport http ravelry https://ravelry-mcp.gonz-paul.dev/mcp

VS Code (.vscode/mcp.json)

{
  "servers": {
    "ravelry": { "type": "http", "url": "https://ravelry-mcp.gonz-paul.dev/mcp" }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "ravelry": { "url": "https://ravelry-mcp.gonz-paul.dev/mcp" }
  }
}

New here? Everything it can do, organised by what you want to do, and how to set up a Claude project as your knitting & crochet guide (instructions to paste included).

Then try one of the example prompts, or the built-in starters: Find a pattern, Substitute a yarn, What can I make with this yarn? and Yarn shops near me.

The hosted server only reads public Ravelry data with this project's read-only API key (with Ravelry's permission), stores nothing about your conversations, and allows 60 requests per minute per user. Prefer to run your own? See Run it yourself.

With your own Ravelry account

To also let your assistant read your stash, queue, projects, favorites and library, add this URL instead:

https://ravelry-mcp.gonz-paul.dev/account/mcp

The first time, your assistant opens a page where you sign in with Ravelry, then confirm on a second page which app gets access. Reading is the default; changing your stash, queue and projects needs a second permission on the same page, and the assistant confirms each change with you first. You can revoke access at any time from your Ravelry account's app settings.

Then you can ask things like:

  • "What should I make next?" (it checks which queued patterns your stash already covers)

  • "What can I make with the DK yarn in my stash?"

  • "Look at my projects and tell me what kind of maker I am." (a crafting profile your assistant can remember)

What the server stores: your Ravelry username and its Ravelry sign-in tokens, encrypted, so it can keep your connection working, and the row counters you create (encrypted, deleted when you remove them). Nothing else about you or your conversations.

Related MCP server: MCP Web Search Tool

Tools

Patterns

Tool

What it does

search_patterns

Search by keyword plus filters: craft, category (plain words like "hat", "toys" or "jumper" are mapped to Ravelry's categories), yarn weight, yardage_min/yardage_max, difficulty_max, fit (baby, child, adult, petite, plus, negative ease...), attributes (techniques and construction in plain words: "top down", "raglan", "cables", "Fair Isle", "toe up", "granny square"... all of them or any of them), language, designer, availability (free (default), ravelry, online, inprint, any), sort, paging.

get_pattern_details

Full details for 1–20 patterns: designer, price, difficulty, rating, yarn weight, yardage, gauge (also as numbers per 10 cm), needle/hook sizes, sizes, techniques, crochet terminology (US or UK), languages, photo and designer notes.

Yarns

Tool

What it does

search_yarns

Search by name plus weight, fiber (merino, alpaca, cotton...) and attributes (superwash, hand-dyed, self-striping...), sorted by best match, rating or popularity. Discontinued yarns are hidden unless asked.

get_yarn_details

For 1–20 yarns: fiber content, yards and grams per skein, recommended needles and hooks, gauge, care, texture, color/dye attributes, where it was made, and notes.

find_yarns_for_pattern

Yarn substitution: the yarns other Ravelry users actually used for a pattern, ranked by how many projects used each, next to the weight, yardage and gauge the pattern calls for and the designer's suggested yarns.

match_yarns

Matches what was read from a ball band, receipt or invoice (brand, name, weight, fiber, yards/grams per skein) to Ravelry yarns, with a confidence level, the reasons and alternatives.

Calculators and reference

The assistant uses these instead of doing knitting arithmetic in its head, so the numbers are right and it can focus on explaining.

Tool

What it does

adjust_for_gauge

Your swatch vs the pattern gauge (typed in, or read from a Ravelry pattern): change needles or not, how big the piece comes out as written, and the pattern's numbers recalculated for your gauge, rounded to the stitch repeat.

spread_evenly

"Increase 13 evenly across 97" → [k8, M1] 6 times, [k7, M1] 7 times. Knitting or crochet, flat or in the round.

yarn_needed

Skeins to buy for a pattern (smallest and largest size) in a given yarn, with a safety margin; warns when the yarn weight differs.

convert_yarn_amount

Grams ↔ meters ↔ yards ↔ skeins for a yarn (its own ball-band ratio) or a yarn weight (typical ratio, marked as an estimate): "I have 200 g of Rios", "how many grams is 300 m of DK?".

count_stitches

Reads written rows (*k2, p2; rep from * to last 2 sts, k2, (sc, inc) x 6 (18)) and counts what each step uses and makes; flags rows that don't add up and counts that differ from the pattern's.

crafting_reference

Needle and hook sizes (metric, US, UK, Japanese), yarn weights across regions (US worsted = UK aran = AU 10 ply), US↔UK crochet and knitting terms, and standard abbreviations.

Starters: Read me this row, Chart ↔ written instructions, Find a pattern from a photo and Fix my knitting or crochet problem.

Shops

Tool

What it does

find_yarn_shops

Local yarn shops around a point (latitude/longitude + radius, nearest first) or by name or city: address, distance, website, phone, email.

Your account (at /account/mcp, after signing in)

Tool

What it does

get_my_crafting_profile

Who you are as a maker: crafts, what you make most, yarn weights you use, difficulty you handle (with an estimated level), stash and queue size, plus a short summary worth remembering.

get_my_stash

Your yarn with weight, colorway, skeins and total yards, and yards available per weight.

get_my_queue

Your queued patterns with the yarn you planned for each.

get_my_projects

Your projects: pattern, craft, status, progress, dates, your rating.

get_my_favorites

Your favorited patterns, yarns, designers…

search_my_library

Patterns, books and magazines in your Ravelry library.

find_patterns_for_my_stash

Patterns that fit yarn you own: same weight, using 40–100 % of the yardage.

pick_from_my_queue

Ranks your queue by what your stash already covers: planned yarn on hand, enough yarn of the right weight, or how many yards you're short.

add_to_my_stash

Adds yarn to your stash (e.g. from a receipt photo) with colorway, dye lot, skeins, length, weight, price, shop and purchase date. Skips yarn already stashed.

add_to_my_queue

Queues patterns, optionally with the yarn you plan to use and a note. Skips patterns already queued.

get_my_project

One project: pattern, status, progress, the stash yarn it uses, and its progress log.

start_project

Starts a project from a pattern (or a queued pattern, which leaves the queue) and sets stash yarn aside for it.

log_project_progress

"Row 42 of the sleeve, used 1 skein": adds a dated line to the project's private log, sets the %, and records yarn used so far.

update_project_status

Finish (leftovers stay in the stash, empty yarn becomes used up), pause, resume or frog (yarn goes back).

update_stash_entry

Fix colorway, dye lot, location, notes, status or the total owned.

remove_from_stash

Permanently delete stash entries (only when you ask; "used up" keeps the history).

estimate_finish_date

"When will I finish?": from your own pace (yards a day over your recent finished projects), for a pattern or a project in progress; with a deadline, says if it's comfortable, tight or unlikely.

plan_yarn_shopping

Shopping list for queued or chosen patterns: what your stash already covers (each yard counted once) and what's left to buy per pattern and per weight, in skeins of the planned yarn when known.

review_my_queue

Queue tidy-up: duplicates, patterns you already made, entries waiting for years, and how long the whole queue would take at your pace. Suggests only; never removes anything.

audit_my_stash

Stash check-up: how long it would last at your pace, yarn no plan uses, the oldest yarn, weights you buy but rarely use, leftovers for scrap projects, entries missing information.

discover_patterns_for_me

New patterns from your own taste (techniques, categories, designers in your favorites), or to learn a technique you haven't used yet, leaving out what you already favorited, queued or made.

get_my_needles

Your needles and hooks; with a pattern, which sizes you have and what's missing (circulars or DPNs for patterns worked in the round).

get_row_counter

A row counter card for a project: big + / − buttons you tap while crafting, several named counters (rows, repeats, decreases), a target and the position in the pattern repeat. Also "where am I?" across projects.

set_my_preferences

Your units: metric (meters, grams, cm) or imperial (yards, ounces, inches). The assistant answers in them and widgets show them.

update_row_counter

Changes a counter from the chat ("add 4 rows", "set a 48-row target", "8-row repeat"). Counters are kept on this server (encrypted), not on Ravelry; "Save to Ravelry log" writes the position to the project.

Plus three extra starters: What should I make next?, Use up my stash and Add yarn to my stash from a photo.

Changing anything needs one extra permission ("add, update and remove" on your stash, queue and projects), asked on the same consent page. Your assistant confirms before each change.

Keeping the stash up to date

Ravelry itself does the yarn bookkeeping: when a project uses part of a stash entry, Ravelry keeps that amount aside and the rest stays free. So the assistant works through projects:

  1. Start: "Let's start Musselburgh with my teal Rios": the project is created and the yarn is set aside.

  2. Work: "I'm at row 42 of the brim, used about one skein": a dated line goes into the project's private notes (your progress log) and the yarn used is updated. Next time, "where was I?" reads that log.

  3. Finish or frog: finished projects keep their yarn and the leftovers stay in your stash (yarn with nothing left becomes "used up"); frogged projects give the yarn back.

That way "what can I make with my stash?" and "what can I start from my queue?" only count yarn that is really free.

Widgets in the chat

In apps that support MCP Apps (Claude, ChatGPT…), two kinds of results show up as interactive widgets; everything else stays plain text:

  • Pattern carousel (search_patterns, discover_patterns_for_me, find_patterns_for_my_stash): swipeable cards with the pattern photo (tap it to open Ravelry), difficulty, yarn weight, yardage, rating and price. Tap 👍 or 👎 on each one; your picks are shared with the assistant as you go, and Find more like my 👍 asks it to dig deeper in that style. Each card also has Similar, Details and + Queue.

  • Row counter (get_row_counter), for a Ravelry project or anything you name: big − / + buttons that respond instantly (saved in the background), keyboard support (↑ / ↓ / space), several counters per project, a target and the position in the pattern repeat, and Save to Ravelry log.

Run it yourself

Only needed if you don't want to use the hosted instance. Requires Node.js 22 or later and your own Ravelry API key.

Get Ravelry API credentials

The server uses Ravelry's read-only basic-auth API keys, not your Ravelry login:

  1. Sign in at https://www.ravelry.com/pro/developer (a free Pro account is created if you don't have one).

  2. Create an app and choose basic auth with read-only access.

  3. Copy the generated username and password.

Claude Desktop: one-click bundle

npm install
npm run pack:mcpb

Then double-click the generated ravelry-mcp.mcpb (or drag it onto Claude Desktop's Settings → Extensions page). Claude Desktop asks for the API username and password and stores the password securely.

Any MCP client: build and point at dist/index.js

git clone https://github.com/gpaul-mcp/MCP_ravelry.git
cd MCP_ravelry
npm install
npm run build

Claude Code

claude mcp add ravelry -e RAVELRY_USERNAME=your-api-username -e RAVELRY_PASSWORD=your-api-password -- node /absolute/path/to/MCP_ravelry/dist/index.js

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "ravelry": {
      "command": "node",
      "args": ["/absolute/path/to/MCP_ravelry/dist/index.js"],
      "env": {
        "RAVELRY_USERNAME": "your-api-username",
        "RAVELRY_PASSWORD": "your-api-password"
      }
    }
  }
}

VS Code (.vscode/mcp.json, prompts for the password instead of storing it in the file)

{
  "inputs": [
    {
      "type": "promptString",
      "id": "ravelry-password",
      "description": "Ravelry API password",
      "password": true
    }
  ],
  "servers": {
    "ravelry": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/MCP_ravelry/dist/index.js"],
      "env": {
        "RAVELRY_USERNAME": "your-api-username",
        "RAVELRY_PASSWORD": "${input:ravelry-password}"
      }
    }
  }
}

Configuration

All configuration comes from environment variables. For local development you can put them in a .env file (see .env.example); it is git-ignored.

Variable

Default

Description

RAVELRY_USERNAME

(required)

Read-only API username (AUTH_USER is still accepted).

RAVELRY_PASSWORD

(required)

Read-only API password (AUTH_PASS is still accepted).

MCP_TRANSPORT

stdio

stdio, or http to serve Streamable HTTP at /mcp.

HOST

127.0.0.1

HTTP mode bind address.

PORT

3000

HTTP mode port.

RAVELRY_TIMEOUT_MS

15000

Timeout for each Ravelry API request.

MCP_ALLOWED_HOSTS

(none)

HTTP mode: public hostnames accepted besides localhost, comma-separated.

MCP_URL_SECRET

(none)

HTTP mode: serve at /mcp/<secret> instead of /mcp (16+ characters).

RATE_LIMIT_PER_MINUTE

60

HTTP mode: requests per client per minute; 0 disables.

TRUST_PROXY

false

HTTP mode: identify clients by CF-Connecting-IP / X-Forwarded-For.

RAVELRY_OAUTH_CLIENT_ID / RAVELRY_OAUTH_CLIENT_SECRET

(none)

Enables "Sign in with Ravelry" and /account/mcp. A Ravelry OAuth 2.0 app whose redirect URL is <PUBLIC_URL>/oauth/ravelry/callback.

PUBLIC_URL

(none)

With sign-in: the public origin, e.g. https://ravelry.example.com.

AUTH_SECRET

(none)

With sign-in: 32+ random characters; encrypts stored tokens and signs cookies.

DATA_DIR

./data

With sign-in: where the SQLite sign-in database is kept.

HTTP mode and hosting

MCP_TRANSPORT=http npm start serves Streamable HTTP at http://127.0.0.1:3000/mcp, plus GET /health and a short landing page at / that shows the connector URL. Host and Origin headers must be localhost or one of MCP_ALLOWED_HOSTS (protection against DNS rebinding).

To host your own instance that people add to Claude or ChatGPT by URL (like the hosted one above), follow Self-hosting with Cloudflare Tunnel: a Docker Compose setup that runs it on your own machine for free.

How "Sign in with Ravelry" works

/account/mcp is an OAuth-protected MCP endpoint, following the MCP authorization spec:

  1. An unauthenticated request gets 401 with a WWW-Authenticate header pointing to /.well-known/oauth-protected-resource/account/mcp, which names this server as the authorization server.

  2. The client discovers /.well-known/oauth-authorization-server, registers itself (dynamic client registration) and starts an authorization-code flow with PKCE (required).

  3. The server (oidc-provider) sends the user to Ravelry's OAuth to sign in, then shows its own consent page naming the client. Each new client must be approved, so another app can't silently reuse someone's Ravelry sign-in.

  4. The client receives an access token (1 hour) and refresh token, scoped to /account/mcp (RFC 8707). Ravelry's own tokens never leave the server; they are refreshed as needed.

Everything is stored in SQLite under DATA_DIR: lookup keys are hashed and every record (including Ravelry tokens) is encrypted with a key derived from AUTH_SECRET.

Development

npm run dev        # run from source with auto-restart (Node runs the TypeScript directly)
npm run inspect    # build and open the MCP Inspector against the server
npm run check      # typecheck + lint + tests
npm run smoke      # after `npm run build`: live end-to-end test against the real Ravelry API

Script

Purpose

npm run build

Compile to dist/ with tsc.

npm start

Run the compiled server.

npm test

Vitest suite: drives the server through a real MCP client.

npm run lint

ESLint (type-checked rules) + Prettier check.

npm run lint:fix

Auto-fix lint and formatting.

npm run pack:mcpb

Build a Claude Desktop bundle (ravelry-mcp.mcpb).

A Husky pre-commit hook runs lint-staged, the typecheck and the tests. CI runs the same checks on Node 22 and 24.

Project structure

src/
├── index.ts                    # Entry point: config, transport (stdio or HTTP), shutdown
├── server.ts                   # createServer() factory: server info, instructions, tools
├── config.ts                   # Environment variable parsing and validation (zod)
├── http.ts                     # Streamable HTTP: host checks, URL secret, rate limit, /health, landing page
├── rate-limit.ts               # Per-client request limiter
├── prompts.ts                  # Conversation starters (MCP prompts)
├── auth/                       # "Sign in with Ravelry": OAuth server, consent page, storage
│   ├── server.ts               # oidc-provider setup, Ravelry login step, consent, token checks
│   ├── ravelry-oauth.ts        # Ravelry's OAuth 2.0 endpoints
│   ├── accounts.ts             # Signed-in accounts and Ravelry token refresh
│   ├── adapter.ts / db.ts      # Encrypted SQLite storage
│   └── crypto.ts / pages.ts    # Key derivation, encryption, HTML pages
├── account/                    # Personal tools for signed-in users
│   ├── lists.ts                # get_my_stash, get_my_queue, get_my_projects, ...
│   ├── insights.ts             # find_patterns_for_my_stash, pick_from_my_queue, profile
│   ├── stash.ts                # Stash normalization (yards per weight)
│   └── setup.ts                # Wires sign-in and the per-user server
├── ravelry/
│   ├── client.ts               # Ravelry API client (fetch, timeouts, cancellation, errors)
│   ├── types.ts                # Ravelry API response types
│   └── vocabulary.ts           # Verified filter values and category resolution
└── tools/
    ├── search-patterns.ts      # search_patterns tool
    ├── get-pattern-details.ts  # get_pattern_details tool
    ├── yarns.ts                # search_yarns and get_yarn_details tools
    ├── find-yarns-for-pattern.ts # find_yarns_for_pattern tool
    ├── find-yarn-shops.ts      # find_yarn_shops tool
    └── format.ts               # Shared formatting helpers
test/                           # Vitest tests (in-process MCP client, mocked Ravelry API)
scripts/
├── smoke.ts                    # Live end-to-end check over stdio
└── pack-mcpb.ts                # MCP Bundle packaging
manifest.json                   # MCP Bundle manifest

Adding a tool

  1. Create src/tools/<name>.ts exporting register<Name>(server, ravelry) that calls server.registerTool() with a title, a description written for the model, a zod inputSchema (use .describe() on every field), an outputSchema, and annotations.

  2. Register it in src/server.ts and list it in manifest.json.

  3. Add a test in test/server.test.ts.

License

MIT, see LICENSE.

📜 Project Overview

Ravelry MCP Server turns AI assistants like Claude and ChatGPT into a knitting and crochet companion, with Ravelry as the backbone. It searches patterns and yarns, reads and updates a maker's own stash, queue and projects through "Sign in with Ravelry", does every crafting calculation exactly, and shows interactive widgets in the chat: a photo carousel of patterns and a row counter. A hosted instance runs at ravelry-mcp.gonz-paul.dev.

🎯 Key Features

  • Pattern search by technique, yarn weight, yardage, difficulty and fit, shown as a photo carousel with 👍/👎 feedback the assistant uses to refine the next search

  • Personal Ravelry data through OAuth: stash, queue, projects, favorites, library and needles, with project tracking that keeps the stash accurate

  • Exact calculators the assistant calls instead of guessing: gauge adjustment, even increases and decreases, yarn quantities, grams ↔ meters, and a stitch counter that checks written pattern rows

  • Planning from the user's own data: finish-date predictions from their pace, shopping lists after the stash, queue and stash check-ups, pattern suggestions to learn new skills

  • Interactive row counter widget with instant taps saved server-side, for Ravelry projects or anything else

  • Metric or imperial preference, US/UK terminology, needle size and yarn weight conversions

🛠️ Technology Stack

  • TypeScript

  • Node.js

  • Model Context Protocol (MCP) TypeScript SDK v2

  • MCP Apps (interactive widgets)

  • OAuth 2.1 (oidc-provider, PKCE, dynamic client registration)

  • SQLite with AES-256-GCM encryption

  • Zod

  • Vite

  • Vitest

  • Docker and Cloudflare Tunnel

  • Ravelry API

Available Tools

13 tools
adjust_for_gaugeAdjust a pattern to my gaugeA
Read-onlyIdempotent

Compares the user's swatch with a pattern's gauge: whether to change needles, how big the piece comes out if they follow the pattern as written, and pattern numbers (cast-on, stitch counts, rows) recalculated for their gauge so the size stays right. Give the pattern gauge, or a pattern_id to read it from Ravelry.

ParametersJSON Schema
NameRequiredDescriptionDefault
countsNoNumbers from the pattern to recalculate for the user.
my_gaugeYesThe user's swatch, measured after blocking if possible.
pattern_idNoReads the gauge from Ravelry.
measurementsNoFinished measurements from the pattern, to see what the user would get.
pattern_gaugeNoThe gauge printed in the pattern.
stitch_multipleNoStitch repeat, e.g. "multiple of 4 + 2", so new counts still fit it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
notesYes
patternYes
verdictYes
needle_adviceYes
yours_per_10cmYes
adjusted_countsYes
as_written_scaleYesWidth factor if the pattern is followed unchanged: 1.1 = 10% bigger.
pattern_per_10cmYes
row_difference_percentYes
measurements_as_writtenYes
stitch_difference_percentYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds real behavioral context beyond that: exactly what is computed (needle-change decision, resulting size, recalculated cast-on/stitch/row counts) and that Ravelry may be consulted for the gauge, which is consistent with the openWorldHint.

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, and the core purpose (what is compared and what is produced) is front-loaded before the input hint. Every clause 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?

For a 6-parameter, nested-object tool with an output schema and full annotations, the description covers purpose, input modes, and the nature of the results, so an agent can call it correctly. The only gap is explicit routing against similar sibling calculators, which keeps it short of a 5.

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 coverage is 100%, so baseline is 3, but the description adds meaning the schema does not: it explains the either/or relationship between pattern_gauge and pattern_id, and frames counts/measurements as the pattern-side inputs to be recalculated. This clarifies the alternative input paths rather than merely restating field docs.

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?

The description states a specific verb+resource (compares the user's swatch with the pattern gauge) and enumerates the three concrete outputs: needle advice, projected size, and recalculated pattern numbers. This clearly separates it from siblings like count_stitches or yarn_needed, which do not do gauge reconciliation.

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?

It gives input-usage guidance ('Give the pattern gauge, or a pattern_id to read it from Ravelry'), which is useful, but never states when to pick this tool over alternatives such as count_stitches, spread_evenly, or yarn_needed. Usage is implied rather than explicit, with no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_yarn_amountGrams ↔ meters ↔ yardsA
Read-onlyIdempotent

Converts an amount of yarn between grams and length (meters/yards) and skeins, e.g. "I have 200 g of Rios" or "how many grams is 300 m of DK?". Uses the yarn's own skein data (yarn_id) when given, else a typical ratio for the yarn weight (an estimate). Yarn is sold by weight in much of the world, but patterns need a length.

ParametersJSON Schema
NameRequiredDescriptionDefault
gramsNo
yardsNo
metersNo
weightNoWhen the exact yarn is unknown.
yarn_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
yarnYes
gramsYes
yardsYes
metersYes
skeinsYesOf the given yarn.
estimatedYesTrue when a typical ratio for the weight was used.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description adds the important accuracy caveat that weight-only conversion is an estimate. It does not, however, describe behavior on conflicting inputs or how the direction of conversion is chosen.

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 sentences, front-loaded with the verb and scope, examples do real work. The closing sentence about yarn being sold by weight is motivational framing rather than operational information, costing it the top score.

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?

An output schema exists so return values need no explanation, but the critical ambiguity for a 5-parameter conversion tool — which combination of grams/yards/meters to supply and what happens if several are given — is left unresolved.

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?

With schema description coverage at 20%, the description must carry more: it names yarn_id and weight's role but never states that grams/yards/meters are alternative inputs, whether they are mutually exclusive, or how the enum weight values map to ratios. It partially compensates, so a baseline 3.

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 (converts) and resource (yarn amount) with the exact unit spaces involved (grams, meters/yards, skeins), plus concrete example phrasings. It is clearly distinguishable from siblings like yarn_needed or adjust_for_gauge.

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?

Explicitly says to pass yarn_id when the exact yarn is known and to fall back to a weight-based typical ratio otherwise — a real routing rule between two parameters. It stops short of naming a sibling alternative or a when-not-to-use case, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

count_stitchesCheck stitch countsA
Read-onlyIdempotent

Reads written knitting or crochet instructions row by row ("*k2, p2; rep from * to last 2 sts, k2", "(sc, inc) x 6 (18)") and counts the stitches each step uses and makes. Flags rows that do not use every stitch and counts that differ from the one printed in the pattern. Use it to walk someone through a row or to check a pattern for errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsYesConsecutive rows or rounds, one per item, as written in the pattern.
craftNoknitting
stitches_beforeNoStitches on the needle before the first row (0 for a magic ring).

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
problemsYesRows with at least one warning.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint, idempotentHint, and openWorldHint=false, so safety is covered. The description adds that the tool flags rows not using every stitch and flags count mismatches, which is real behavioral detail beyond the annotations. Output schema exists so return-format details are rightly left out.

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, front-loaded with what the tool reads, followed by what it flags and when to use it. The inline examples earn their space by showing the input format. Zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations cover safety, output schema covers returns, and the description covers input format with examples plus flag behavior. Nothing essential is missing for an agent to call this correctly across knitters and crocheters.

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 description coverage is 67%. The description does not mention the rows, craft, or stitches_before parameters by name, though the row-by-row input model is conveyed implicitly through examples. With a reasonably descriptive schema, baseline 3 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 (reads/counts), resource (written knitting/crochet instructions row by row), and even gives concrete input examples like '*k2, p2; rep from * to last 2 sts, k2'. It also names the two output behaviors (flags rows missing stitches, mismatched counts), distinguishing it from siblings like spread_evenly or adjust_for_gauge.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states two use contexts: walking someone through a row and checking a pattern for errors. No other sibling is named as an alternative, but the two usage modes are clear enough that an agent knows when to invoke this versus counting manually or using spread_evenly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

crafting_referenceKnitting and crochet referenceA
Read-onlyIdempotent

Reference tables: needle and hook sizes (metric, US, UK, Japanese), yarn weights across regions (US worsted = UK aran = AU 10 ply, with typical needles and gauge), US↔UK crochet and knitting terms (UK "dc" is US "sc"!), and standard abbreviations. Use lookup to find one entry, e.g. "4mm", "US 8", "H", "DK", "8 ply", "ssk", "htr".

ParametersJSON Schema
NameRequiredDescriptionDefault
craftNoFor abbreviations.
topicYes
lookupNoFilter, e.g. "4.5", "ssk", "UK dc".

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
notesYes
topicYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety/idempotency profile is covered structurally. The description adds useful context about the nature of the data (which reference categories exist and how they are cross-regional), but discloses no runtime behavior beyond that.

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?

Two sentences, front-loaded with the resource scope before the usage hint. The first sentence is a dense list but every clause carries new information; minimal waste.

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?

An output schema exists so return values need no explanation, and annotations cover safety. The description sufficiently covers what data is available and how to query it; the only gap is sibling disambiguation against the conversion/gauge tools.

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 coverage is 67%, and the description adds real value by enumerating the topics the `topic` enum encodes and giving concrete `lookup` examples ("4mm", "US 8", "H", "DK", "8 ply", "ssk", "htr") that clarify accepted value formats beyond the schema's terse description.

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 resource (reference tables) with concrete scope: needle/hook sizes, yarn weights across regions, US↔UK term mappings, and abbreviations. This is clearly distinct from the sibling tools, which are pattern/yarn search and calculation/conversion utilities.

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?

The description tells the agent how to use `lookup` (to find one entry) with concrete input examples, which is helpful. However, it gives no guidance on when to prefer this static reference over related siblings like adjust_for_gauge or convert_yarn_amount, nor any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_yarns_for_patternFind yarns for a patternA
Read-onlyIdempotent

Yarn substitution: lists the yarns other Ravelry users actually used to make a pattern, ranked by how many projects used each one, next to the yarn weight, yardage and gauge the pattern calls for and the yarns its designer suggested.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many yarns to return.
pattern_idYesRavelry pattern id (from search_patterns).
same_weight_onlyNoOnly return yarns of the pattern's own yarn weight, the safest substitutes.
include_discontinuedNoAlso return yarns that are no longer made.

Output Schema

ParametersJSON Schema
NameRequiredDescription
yarnsYesYarns other people used for this pattern, most used first.
patternYes
total_yarns_usedYesHow many different yarns people have used in total.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds behavioral context beyond that: results are ranked by number of projects, and the response places user-substituted yarns next to the pattern's required weight/yardage/gauge and the designer's suggestions. It does not discuss result volume or truncation, which is minor given the output schema exists.

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?

It is a single dense sentence, front-loaded with the 'Yarn substitution:' label, and every clause carries information. It is slightly overloaded in the middle with three parallel pieces of data, but there is no padding or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup with a full output schema and full annotation coverage, the description supplies everything an agent needs: what is returned, how it is ranked, and the comparison context. Return-value formatting is handled by the output schema, so nothing material is missing.

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 description coverage is 100%, so all four parameters (pattern_id, limit, same_weight_only, include_discontinued) are already documented in the schema. The description says nothing about any of them, including the important same_weight_only filter, so it adds no semantic value above the structured baseline of 3.

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 gives a specific verb and resource: it lists yarns other Ravelry users actually used to make a given pattern. The 'yarn substitution' framing and the detail about ranking by project count make the resource concrete. It never names its siblings (search_yarns, match_yarns, get_yarn_details), so an agent must infer the boundary itself, which keeps it below a 5.

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?

'Yarn substitution' implies the substitution use case, and the mention of the pattern's own weight and gauge suggests a comparison scenario. However, there is no explicit when-to-use versus match_yarns (which sounds like the nearest alternative for gauge-based matching) and no exclusions or prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_yarn_shopsFind yarn shopsA
Read-onlyIdempotent

Find local yarn shops from Ravelry's shop directory, either around a point (latitude/longitude + radius, nearest first) or by shop name or city. For "near me" or "in ", prefer coordinates: use the coordinates of the place the user names.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based results page.
queryNoShop name or city, e.g. "London" or "Loop".
unitsNokm
radiusNoSearch radius around latitude/longitude.
latitudeNo
longitudeNo
page_sizeNoResults per page (max 50).

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
shopsYes
unitsYes
page_countYes
total_resultsYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so safety and idempotency are covered. The description still adds real behavioral value by disclosing the result ordering ('nearest first') and the data source (Ravelry's shop directory), which the annotations do not convey.

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 tightly packed sentences: the capability and its data source come first, the mode selection and the concrete 'near me' advice follow. No filler, no restatement of the title.

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?

An output schema exists so return values are handled structurally, and annotations cover the safety profile, leaving the description to explain modes and ordering — which it does. Only minor gaps remain, such as the default units and pagination expectations for a 7-parameter tool.

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 coverage is a moderate 57% (page, page_size, radius and query are documented in the schema). The description goes beyond that by explaining how latitude, longitude and radius combine into one search mode and by clarifying that 'query' accepts either a shop name or a city — relational semantics the schema alone does not supply. It is silent on 'units', however.

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 ('Find local yarn shops from Ravelry's shop directory') and scopes it precisely, making it immediately distinguishable from yarn/pattern siblings like search_yarns or get_yarn_details.

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 lays out the two operating modes (proximity search via latitude/longitude + radius, or text search by shop name/city) and gives a routing rule for the common 'near me' case. It stops short of stating exclusions or fallbacks, e.g. what to do when coordinates are unknown, so it falls just below the explicit when/when-not tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pattern_detailsGet Ravelry pattern detailsA
Read-onlyIdempotent

Get full details for one or more Ravelry patterns by id: designer, price, difficulty, rating, yarn weight, yardage, gauge, needle/hook sizes, sizes, techniques, crochet terminology (US/UK), and the designer notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesRavelry pattern ids (from search_patterns), 1 to 20 per call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
patternsYes
missing_idsYesRequested ids Ravelry returned nothing for.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered structurally. The description adds no behavioral context beyond that – no rate limits, auth requirements, or batching caveats (the 20-id cap lives in the schema). The field list describes return content, which the output schema already supplies, so it earns only baseline credit.

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?

One sentence, front-loaded with the verb and resource before the field enumeration. The long comma list is information-dense rather than padded, though it borders on enumerating what the output schema should carry.

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?

With an output schema present and rich annotations, the description need not explain return values or safety, and it correctly focuses on purpose and scope. The only real gap is the missing when/when-not guidance relative to search_patterns.

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?

There is a single parameter with 100% schema description coverage, which already documents origin (from search_patterns), type, and the 1–20 range. The description only restates 'by id' and adds no format or edge-case guidance, so baseline 3 applies.

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 (Get), resource (full details for Ravelry patterns), and access path (by id), and the sibling set makes the distinction clear: search_patterns finds ids, this fetches details, and get_yarn_details covers the other resource. The enumerated field list reinforces exactly what 'full details' means. An agent can route here 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'by id' implies a post-search lookup, but the description never explicitly says to call this after search_patterns rather than in its place, nor does it flag when not to use it (e.g., for bulk browsing). Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_yarn_detailsGet Ravelry yarn detailsA
Read-onlyIdempotent

Get full details for one or more yarns by id: fiber content, recommended needles and hooks, gauge, care, texture, color/dye attributes, where it is made, and notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesRavelry yarn ids, 1 to 20 per call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
yarnsYes
missing_idsYesRequested ids Ravelry returned nothing for.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is fully covered externally. The description adds nothing behavioral beyond that (no rate limits, auth needs, or partial-failure behavior), and its field list largely restates what the existing output schema already conveys.

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?

A single front-loaded sentence with no wasted preamble; the enumerations of returned attributes are dense but relevant. Slightly long in the tail, but appropriately sized for the tool's scope.

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?

With annotations covering safety, a 100%-covered single-parameter schema, and an output schema handling return structure, the definition is nearly self-sufficient. The only omission is any guidance on when this is the right lookup versus searching, which keeps it short of a 5.

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 description coverage is 100% and the single parameter already documents the 1-to-20 id range and integer type. The description only echoes 'by id', adding no format, ordering, or error-handling semantics beyond the schema, so baseline 3 applies.

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 ('Get full details for one or more yarns by id') and the 'by id' qualifier cleanly separates it from sibling search_yarns / find_yarns_for_pattern, which operate by query or pattern. The listed attributes further pin down exactly what 'full details' means.

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?

The 'by id' phrasing implies this is a follow-up to a search (you need an id first), but the description never states when to prefer this over search_yarns or match_yarns, nor any prerequisites. Usage is only implied, not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_yarnsMatch yarns to RavelryA
Read-onlyIdempotent

Finds the Ravelry yarn behind text read from a ball band, receipt or invoice. Pass one item per yarn with the raw label plus whatever you could read (brand, name, weight, fiber, yards/meters and grams per skein). Returns the best match with a confidence and alternatives; use the yarn ids with add_to_my_stash or get_yarn_details.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
matchesYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/openWorld, so the bar is lowered. The description still adds useful behavior: results come with a confidence and alternatives, which tells the agent how to handle uncertain matches. It does not mention batching limits or failure behavior, so not a 5.

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?

Three tight sentences: purpose, input shape, then return + follow-up. Front-loaded and every sentence earns its place with no repetition of structured fields.

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?

Output schema exists, so return values need not be explained, yet the description briefly and usefully characterizes them (best match, confidence, alternatives). Input, output, and next-step context are all present; only edge behavior (limits, no-match handling) is absent.

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 reported as 0%, so the description must carry the load, and it does: it enumerates the readable fields to supply per item (brand, name, weight, fiber, yards/meters, grams per skein) and clarifies the one-item-per-yarn structure. It omits the enum values for weight and the item cap, which the schema already supplies.

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+resource: 'Finds the Ravelry yarn behind text read from a ball band, receipt or invoice.' The input-source framing implicitly differentiates it from search_yarns (query-based lookup), though it never names that sibling. Clear purpose, but not explicit sibling routing.

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 concrete invocation context ('Pass one item per yarn with the raw label plus whatever you could read') and routes the agent downstream ('use the yarn ids with add_to_my_stash or get_yarn_details'). No when-not guidance or ambiguity handling instructions, but the positive guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_patternsSearch Ravelry patternsA
Read-onlyIdempotent

Search the Ravelry pattern database by keyword and filters: craft, category, yarn weight, yardage, difficulty, fit, techniques and construction (attributes), language, designer and price. Returns a page of matches; call get_pattern_details with the ids for yarn, gauge, needles and notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
fitNoWho it is sized for, or how it fits: "petite", "plus", "tall", "maternity", "negative-ease", "oversized"... (any of them matches).
pageNo1-based results page.
sortNoResult order. Defaults to Ravelry's "best match".
craftNoOnly return patterns for this craft. Omit for all crafts.
queryNoFree-text search, e.g. "cabled beanie". Omit to browse by filters alone.
weightNoYarn weights the pattern is written for (any of them matches).
categoryNoWhat the pattern makes, in plain words: "hat", "socks", "cardigan", "shawl", "blanket", "toy"... The closest Ravelry category is used.
designerNoOnly patterns by this designer, e.g. "Ysolda Teague".
languageNoLanguage the pattern is written in, as a code: en, fr, de, es, ja, nl...
page_sizeNoResults per page (max 50).
attributesNoTechniques and construction, in plain words: "top down", "seamless", "raglan", "cables", "stranded", "lace", "brioche", "toe up", "heel flap", "granny square", "tunisian", "chart", "written", "video tutorial", "Fair Isle", "v neck", "pockets"... Mapped to Ravelry pattern attributes.
yardage_maxNoMaximum total yardage, in yards (1 m ≈ 1.09 yd). Use for "what can I make with the yarn I have".
yardage_minNoMinimum total yardage, in yards.
availabilityNofree = free patterns only (default); ravelry = sold as a Ravelry download; online = available on another website; inprint = in a printed book/magazine; any = no filter.free
difficulty_maxNoHighest average difficulty rating, 1 (easiest) to 10. Beginner ≈ 3 or less.
attribute_matchNoWhether patterns need all the attributes (default) or any of them.all

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
unitsNoThe signed-in user's units.
categoryYesThe Ravelry category the search was filtered to.
patternsYes
attributesYesThe Ravelry attributes the search was filtered to, by name.
page_countYes
total_resultsYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent, so the safety profile is covered. The description adds genuine workflow context by describing the paginated result shape and the two-step search-then-detail pattern, though it says nothing about rate limits or result caps beyond the schema's page_size.

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, front-loaded with the core action and ending with the actionable next step. The filter enumeration is dense but earns its place by previewing the filter surface.

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?

An output schema exists, so return values need not be re-explained, and the description covers scope plus the follow-up call. For a 16-parameter tool the description is adequate, though it could note pagination behavior more explicitly.

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 description coverage is 100% and every parameter is documented in-schema with enums and defaults, so the schema carries the semantics. The description's filter list largely restates those schema fields without adding syntax or format detail, matching the baseline 3.

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 (search) and resource (Ravelry pattern database), then enumerates the filter dimensions. It is clearly distinct from sibling search_yarns, which covers a different resource.

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?

Tells the agent it returns a page of matches and explicitly routes follow-up work to get_pattern_details for yarn, gauge, needles and notes. It gives no when-not guidance or comparison to sibling searches, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_yarnsSearch Ravelry yarnsA
Read-onlyIdempotent

Search the Ravelry yarn database by name, weight, fiber and attributes (superwash, hand-dyed, self-striping...). Excludes discontinued yarns unless asked. Returns yardage and grams per skein, washability and rating for each match.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based results page.
sortNobest = best match; rating = highest rated; projects = most used on Ravelry.best
fiberNoFibers the yarn contains (any of them matches).
queryNoYarn or brand name, e.g. "Malabrigo Rios" or "Drops". Omit to browse by filters.
weightNoYarn weights (any of them matches).
page_sizeNoResults per page (max 50).
attributesNoYarn attributes such as superwash, hand-dyed or self-striping (any matches).
include_discontinuedNoAlso return yarns that are no longer made.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
yarnsYes
page_countYes
total_resultsYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, open-world behavior, and the description usefully adds the non-obvious default that discontinued yarns are excluded and a summary of what each match contains (yardage/grams, washability, rating). It does not discuss pagination limits or result caps, which remain undocumented in prose.

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?

Three short sentences, each carrying distinct information: what is searched, the default exclusion rule, and the return payload. The scope of search is front-loaded with no filler.

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 read-only search with full annotation coverage, a complete output schema and fully documented parameters, the description supplies the two things structured fields do not: search dimensions and the discontinued-exclusion default. Pagination behavior is left to the schema, which is acceptable but leaves a minor gap.

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 description coverage is 100%, so each parameter is already documented with enums, defaults and examples such as the "Malabrigo Rios" query example. The description restates the filter categories (name, weight, fiber, attributes) at a high level without adding syntax or constraint detail beyond the schema, making the baseline 3 appropriate.

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?

States a specific verb (Search) and resource (Ravelry yarn database) and enumerates the filter dimensions, so the agent knows exactly what the tool returns and how it can be narrowed. It does not explicitly distinguish itself from close siblings such as find_yarns_for_pattern or match_yarns, which requires the agent to infer the difference.

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?

"Excludes discontinued yarns unless asked" gives a clear default behavior, but there is no explicit when-to-use guidance or routing between this and alternative yarn tools. Usage is implied (search by name/fiber/weight/attributes) rather than stated against alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spread_evenlyIncrease or decrease evenlyA
Read-onlyIdempotent

Spaces increases or decreases evenly across a row or round, e.g. "increase 13 stitches evenly across 97": returns the exact written instruction. Knitting uses M1 / k2tog, crochet uses 2 sts in one / sc2tog.

ParametersJSON Schema
NameRequiredDescriptionDefault
craftNoknitting
changeYesStitches to add (positive) or remove (negative).
stitchNoCrochet stitch, e.g. "sc", "hdc", "dc" (default sc).
workedNoflat
stitchesYesStitches on the needle now.

Output Schema

ParametersJSON Schema
NameRequiredDescription
stepsYes
instructionsYes
stitches_afterYes
stitches_beforeYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, idempotent, closed-world computation, so the bar is lower. The description adds genuine value beyond them by disclosing the craft-specific technique mapping (M1/k2tog for knitting, 2 sts in one/sc2tog for crochet) and that the result is a ready-to-use written instruction.

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 tight sentences, front-loaded with the core action and immediately backed by a concrete example, with no filler. Every clause carries information.

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?

An output schema exists, so the return value need not be explained (though the description still helpfully notes it returns the written instruction). Coverage is solid for a 5-parameter computation tool, with the only real omission being any explanation of the flat-vs-round 'worked' option.

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 60%, with 'change', 'stitches', and 'stitch' already documented in the schema. The description reinforces the increase/decrease and knitting-vs-crochet semantics but says nothing about the 'worked' parameter (flat vs. round) or the enum meanings, so it does not fully compensate for the coverage gap. Baseline 3 fits.

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 (spaces increases/decreases evenly) with the exact resource (stitches across a row or round) and names the concrete output (the written instruction). The worked example "increase 13 stitches evenly across 97" makes the function unmistakable and clearly distinct from count_stitches or adjust_for_gauge.

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?

The example implies when the tool applies, and the mention of both knitting and crochet techniques hints at scope, but there is no explicit when-to-use vs. when-not-to-use guidance and no named alternative among siblings such as adjust_for_gauge. Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

yarn_neededHow much yarn to buyA
Read-onlyIdempotent

Works out how many skeins to buy for a pattern with a given yarn, with a safety margin. Reads the yardage from a Ravelry pattern (smallest and largest size) and the skein length from a Ravelry yarn, or takes the numbers directly. Can account for a gauge difference or a bigger size (scale).

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoMultiply the yardage, e.g. 1.15 for a bigger size or a looser gauge.
yarn_idNoThe yarn the user will use.
pattern_idNo
pattern_yardsNoTotal the pattern needs for the chosen size (meters: multiply by 1.094).
margin_percentNoSafety margin.
yards_per_skeinNo
meters_per_skeinNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
yarnYes
notesYes
optionsYes
patternYes
yards_per_skeinYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, so safety is covered. The description adds useful context about data sourcing (Ravelry pattern/yarn vs direct numbers) and the safety-margin concept, but says nothing about edge cases or what happens when both direct numbers and IDs are supplied.

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 tightly packed sentences with no filler, and the core computation is front-loaded before the data-source and scale caveats.

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?

An output schema exists, so return values need not be explained. For a 7-parameter, all-optional calculator the description covers the dual input paths and scaling adequately; only the skein-length parameters and mutual exclusivity of inputs are left implicit.

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 57%, so the schema carries roughly half the load. The description clarifies the scale and pattern_yards intent, but largely restates the schema's own wording on scale, and never explains yards_per_skein vs meters_per_skein or the yarn_id/pattern_id pairing, leaving part of the gap unfilled.

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?

States a specific verb and resource: computing how many skeins to buy for a pattern with a given yarn, including a safety margin. The scope (skein count for purchasing) is distinct from siblings like convert_yarn_amount and adjust_for_gauge, though it never names an alternative to sharpen the boundary.

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?

It implies two input modes (pull yardage from a Ravelry pattern/yarn, or supply numbers directly) and mentions optional scale handling, which hints at when the tool applies. It gives no explicit when-not guidance and never routes the agent away from the closely related adjust_for_gauge or convert_yarn_amount siblings.

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. 13 tool updatesv2.8.0
    • First observedadjust_for_gauge
    • First observedconvert_yarn_amount
    • First observedcount_stitches
    • First observedcrafting_reference
    • First observedfind_yarn_shops
    • First observedfind_yarns_for_pattern
    • First observedget_pattern_details
    • First observedget_yarn_details
    • First observedmatch_yarns
    • First observedsearch_patterns
    • First observedsearch_yarns
    • First observedspread_evenly
    • First observedyarn_needed

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but there is mild overlap in the yarn-finding cluster (search_yarns vs match_yarns vs find_yarns_for_pattern) and in the amount calculators (yarn_needed vs convert_yarn_amount). The descriptions do a good job of drawing boundaries, so an agent can mostly select correctly.

Naming Consistency4/5

The set predominantly follows a verb_noun snake_case pattern (search_patterns, get_yarn_details, find_yarn_shops, adjust_for_gauge, convert_yarn_amount). A few noun-phrase outliers (yarn_needed, crafting_reference) slightly break the convention but remain clear and readable.

Tool Count5/5

13 tools is well-scoped for a domain that spans pattern search, yarn search, substitution, gauge math, stitch counting, and reference lookups. Each tool earns its place without redundancy.

Completeness4/5

The surface covers the core crafting workflow (search/details for patterns and yarns, substitution, gauge adjustment, calculators, shops, reference tables) with no obvious functional dead ends. Minor gaps exist: it references an add_to_my_stash tool that is not part of the set, and stash/project/favorites management is absent.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    A Model Context Protocol server that enables AI assistants to perform real-time web searches, retrieving up-to-date information from the internet via a Crawler API.
    1
    51 npm
    42
    ISC
  • A
    license
    A
    quality
    B
    maintenance
    A Model Context Protocol (MCP) server for the Open Library API that enables AI assistants to search for book information.
    7
    147 npm
    95
    MIT