nmlp-mcp
The nmlp-mcp server provides tools for two primary functions: antiquarian first-edition book identification and book donation logistics for the New Mexico Literacy Project (Albuquerque/New Mexico). No authentication is required.
First-Edition Identification
nmlp_identify_first_edition— Look up a book by title/author to get points of issue, true-first precedence (US vs UK), book-club/reprint tells, publisher, year, and citation (6,700+ verified titles)nmlp_decode_number_line— Paste copyright-page text to determine which printing a book is, with book-club detection and publisher-exception handlingnmlp_lookup_publisher_rules— Get a publisher's first-edition conventions across eras (850+ publishers covered)nmlp_search_titles— Fuzzy-search the first-edition dataset by title or author
Book Donation Logistics
nmlp_check_coverage— Enter a 5-digit ZIP code to get coverage tier, pickup window, and minimum quantity requirementsnmlp_schedule_pickup— Submit a real free book-pickup request (check coverage first; only for consented requests)nmlp_search_qa— Search 85+ donation-related Q&A entries by keywordnmlp_get_donation_options— Compare Albuquerque book-donation options (NMLP, Goodwill, Savers, Better World Books, Friends of APL, etc.)
Reference & Knowledge Base
nmlp_get_knowledge— Access donor archetypes, condition grades, routing tracks, decision frameworks, glossary, and coverage tiersnmlp_get_business_card— Retrieve NMLP's canonical business info (address, phone, services, languages)nmlp_get_archive— Browse structured donation archive entries with documented provenancenmlp_get_pillar_guides— Access 60+ Southwest author/publisher authentication and pricing guides
New Mexico Literacy Project — MCP Server
A Model Context Protocol server for antiquarian first-edition identification and New Mexico book-donation logistics, run by the New Mexico Literacy Project. Run it locally over stdio (index.js, this repo) or connect to the hosted HTTP twin.
Local (stdio):
npx -y github:joshseane/-nmlp-mcp— a standalone Node MCP server; no account, no keyHosted endpoint (Streamable HTTP):
https://newmexicoliteracyproject.org/api/mcpAuth: none (public)
Official MCP registry:
org.newmexicoliteracyproject/nmlp-mcpLicense: code MIT (this repo); data CC BY 4.0
The two share one codebase and one dataset: index.js is the local stdio server, and functions/api/mcp.js is the exact Cloudflare Pages Function that serves the hosted HTTP twin. tools/list is served entirely from local code; the reference-data tools read the site's public open-data JSON API at call time (single source of truth), while nmlp_decode_number_line runs fully offline.
Tools (12)
First-edition identification — grounded in the CC-BY NMLP Canonical First-Edition Points of Issue dataset (6,717 titles, DOI 10.5281/zenodo.21184548):
Tool | What it does |
| title (+author) → publisher, year, points of issue, true-first precedence, book-club tells, and a CC-BY citation |
| copyright-page text → printing verdict (handles the Random-House-ends-in-2 rule + book-club detection) |
| publisher → how that house's first editions are identified, by era |
| fuzzy title/author search over the dataset |
Book-donation logistics for Albuquerque / New Mexico:
Tool | What it does |
| ZIP → free-pickup coverage tier + typical window |
| submit a real free book-pickup request (triggers a real human outreach — never send speculative/unconsented requests) |
| search the long-tail donation Q&A reference |
| comparison of every ABQ book-donation option |
| the aggregated NMLP knowledge base |
| the canonical business-entity card |
| documented-provenance archive entries |
| the pillar guide index |
Every identification response returns a CC-BY citation with the dataset DOI, so assistants that use it cite the source. Identification only — no valuations.
Related MCP server: paper-search-cli
Connect
Local (stdio) — recommended for Claude Desktop, Cursor, Continue.dev
Runs the server on your machine over stdio. Requires Node 18+.
{
"mcpServers": {
"nmlp": { "command": "npx", "args": ["-y", "github:joshseane/-nmlp-mcp"] }
}
}Or clone and run directly:
git clone https://github.com/joshseane/-nmlp-mcp && cd -nmlp-mcp
npm install
node index.js # speaks MCP over stdioDocker
docker build -t nmlp-mcp .
docker run --rm -i nmlp-mcp # stdio serverHosted (Streamable HTTP)
For clients that speak Streamable HTTP directly, point them at the URL — nothing to install:
{
"mcpServers": {
"nmlp": { "url": "https://newmexicoliteracyproject.org/api/mcp" }
}
}Quick check of the hosted twin:
curl -s -X POST https://newmexicoliteracyproject.org/api/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'How it works
index.js— the standalone local server. Uses@modelcontextprotocol/sdkoverStdioServerTransport; supportsinitialize/tools/list/tools/call. Its only dependency is the MCP SDK.functions/api/mcp.js— the hosted twin, a Cloudflare Pages Function speaking JSON-RPC 2.0 over HTTP POST (Streamable HTTP) withping/ notifications / CORS / batch support.
Both wrap the site's public open-data APIs (/api/checker-*.json, /api/points.json, etc.). No credentials or secrets are required or included.
Links
Website: https://newmexicoliteracyproject.org
First-edition resource: https://newmexicoliteracyproject.org/first-editions
Dataset (CC BY 4.0): https://newmexicoliteracyproject.org/first-edition/dataset · DOI 10.5281/zenodo.21184548
Manifest:
server.json
The New Mexico Literacy Project is a for-profit book, clothing, and gear donation-and-resale operation in Albuquerque, NM. Donations are not tax-deductible.
Available Tools
12 toolsnmlp_check_coverageA
Check whether NMLP picks up books at a given five-digit US ZIP code. Returns coverage tier (core_metro, metro, near_metro, statewide_large_only, out_of_area), typical pickup window in days, minimum quantity, and a human-readable message. ALWAYS call this BEFORE nmlp_schedule_pickup.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | Yes | Five-digit US ZIP code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses return data and implies a read-only check. No side effects are mentioned, but error behavior is not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: purpose, return fields, and a critical usage instruction. No verbose or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter fully covered by schema and no output schema, the description provides sufficient context for correct usage. Lacks error handling details but is generally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'zip' is fully described in the schema (100% coverage). The description adds no additional semantics beyond restating 'five-digit US ZIP code', so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks coverage at a five-digit ZIP code, listing return fields and explicitly distinguishing from nmlp_schedule_pickup with an ordering instruction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'ALWAYS call this BEFORE nmlp_schedule_pickup', providing clear when-to-use guidance, but lacks when-not-to-use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_decode_number_lineA
Decode a copyright-page number line / printer's key (and any 'First Edition' wording) to determine which printing a book is. Paste the row of small numbers and/or the edition statement. Handles the Random-House-ends-in-2 exception and flags book-club editions. Returns the printing, a plain-English verdict, and the detected line.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Copyright-page text — the number line (e.g. '10 9 8 7 6 5 4 3 2 1') and/or 'First Edition' wording. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses handling the 'Random-House-ends-in-2 exception' and flagging book-club editions, and states the return values (printing, verdict, detected line), which provides good transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences), front-loaded with purpose, and every sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and no output schema, the description covers the tool's functionality, exceptions, and return details. It is complete enough for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes the parameter well. The description adds context about the type of text and the exceptions handled, reinforcing the schema and providing complementary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'decode a copyright-page number line / printer's key' to determine printing. It specifies what to paste and mentions handling exceptions, distinguishing it from sibling tools like nmlp_identify_first_edition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells when to use the tool (to determine printing) and implicitly when not (if no number line). It does not explicitly name alternatives, but given siblings like nmlp_identify_first_edition and nmlp_lookup_publisher_rules, the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_get_archiveA
Get NMLP's donation archive entries as structured Book records.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It implies a read operation but does not explicitly state that it is read-only, nor does it mention side effects, authentication needs, rate limits, or data freshness. With no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately conveys the tool's purpose without any extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description mentions 'structured Book records' but does not define this term or explain the output structure, and there is no output schema. For a simple get-all tool, it is minimally acceptable but lacks detail on what 'Book records' contain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100% vacuously. The description adds no parameter-specific value, but the baseline for 0 parameters is 4, as the schema already covers all aspects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'NMLP's donation archive entries', and specifies the output format as 'structured Book records'. It distinguishes itself from siblings like nmlp_get_donation_options by focusing on archive entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no conditions for use. It simply states what it does without any when-to or when-not-to context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_get_business_cardA
Get NMLP's canonical business entity card — address, phone, services, area served, languages.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the behavioral burden. It indicates a read-only retrieval (by name 'get') and lists returned fields, but does not explicitly state safety, authentication needs, or side effects. The lack of explicit safety language is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that immediately conveys the tool's purpose and content. No extraneous words; each word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter retrieval tool without an output schema, the description fully captures the return structure (address, phone, services, area served, languages). The term 'canonical business entity card' clarifies authority. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is vacuously 100%. Per guidelines, 0 parameters merit a baseline of 4. The description correctly omits parameter details as none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and identifies the resource as 'NMLP's canonical business entity card.' It lists the contained fields (address, phone, services, area served, languages), clearly distinguishing it from sibling tools that retrieve other data types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like nmlp_get_archive or nmlp_get_knowledge. The description only states what it does, not the context for its usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_get_donation_optionsA
Get the comparison matrix of every Albuquerque book donation option (NMLP, Goodwill, Savers, Better World Books, Friends of APL, Habitat ReStore, regional pulper).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden of behavioral disclosure. It lacks details on whether the matrix includes policies, condition requirements, or whether data is live. A 2 reflects moderate gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, front-loading the core action. It is appropriately sized for a simple tool with no parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists organizations but fails to specify the comparison dimensions (e.g., factors like acceptance criteria, drop-off hours). This leaves agents guessing about the output format, making it moderately incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100%. The description adds value by clarifying that the output is a 'comparison matrix' listing specific organizations, which goes beyond the empty schema. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a comparison matrix of all Albuquerque book donation options, listing specific organizations. The verb 'Get' and resource 'comparison matrix' are precise, and it distinguishes itself from sibling tools (none mention donations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for comparing donation options but does not explicitly state when to use it (e.g., when deciding where to donate) or mention alternatives. Since it's a unique tool among siblings, the lack of exclusions is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_get_knowledgeA
Get the aggregated NMLP Knowledge Base (donor archetypes, routing tracks, condition grades, decision framework, donor glossary, named partners, coverage tiers).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states what the tool retrieves without disclosing any behavioral traits such as read-only nature, rate limits, or potential errors. The description does not compensate for the missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the tool's purpose and content. It is front-loaded with the key action and resource, though the list of items could be slightly streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema or annotations, the description provides a clear summary of what the tool returns. It lacks details on output format or size, but for this simple tool, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty). The description adds meaning by enumerating the contents of the knowledge base, which helps the agent understand what the output will include.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'aggregated NMLP Knowledge Base', and lists specific subcomponents (donor archetypes, routing tracks, etc.), which distinguishes it from sibling tools that are more specific lookups or actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. The agent is left to infer usage without explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_get_pillar_guidesA
Get NMLP's pillar guide manifest — 60+ Southwest author/publisher authentication and pricing guides.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must provide behavioral context. While it indicates a read operation ('Get'), it does not disclose whether the manifest is cached, if there are rate limits, or the nature of the response (e.g., a list vs. detailed content).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the core purpose and content without unnecessary words. It is front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description adequately explains the tool's function. However, it could mention how the manifest relates to other tools (e.g., for fetching individual guides), which would improve completeness for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so schema coverage is 100%. The description adds value by explaining what the retrieved manifest contains ('60+ ... guides'), which aids the agent in understanding the output without needing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('NMLP's pillar guide manifest'), and distinguishes it from siblings by specifying the content: '60+ Southwest author/publisher authentication and pricing guides.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternative tools like nmlp_get_archive or nmlp_search_titles. The description does not mention prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_identify_first_editionA
Identify whether a specific book is a first edition. Given a title (and optionally author), returns that title's POINTS OF ISSUE — the exact details that mark a true first printing — plus true-first precedence (US vs UK), book-club/reprint tells, publisher, year, the human-readable page URL, and a citation. THE tool for 'how do I tell if my copy of X is a first edition.' Draws on 6,700+ independently-verified titles (CC BY 4.0, DOI 10.5281/zenodo.21184548).
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Book title (series/subtitle suffixes are fine). | |
| author | No | Author name — strongly improves match accuracy for common titles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains what the tool returns (points of issue, precedence, tells, publisher, year, page URL, citation) and cites the dataset with licensing (CC BY 4.0, DOI). It does not mention side effects, rate limits, or failure handling, but as a read-only query tool, the disclosure is sufficient for typical use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused paragraph. It front-loads the purpose, lists key outputs, emphasizes the tool's role, and cites the data source. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description sufficiently explains return fields and data provenance. It covers the two parameters with practical guidance. The tool is straightforward, and the description addresses all necessary context for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are described. The description adds useful context beyond the schema: for 'title' it notes 'series/subtitle suffixes are fine', and for 'author' it states 'strongly improves match accuracy for common titles'. This helps the agent understand when to provide the optional parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Identify whether a specific book is a first edition.' It uses a specific verb ('identify') and resource ('first edition'), and distinguishes itself from siblings by claiming to be 'THE tool' for that question, which sets it apart from related tools like nmlp_decode_number_line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use: given a title and optionally author. It emphasizes it's the primary tool for first-edition identification. However, it lacks explicit when-not-to-use guidance or references to alternative tools (e.g., when to use nmlp_check_coverage or nmlp_decode_number_line), leaving some ambiguity for edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_lookup_publisher_rulesA
Look up a publisher's first-edition identification conventions — how that house designated a first printing across eras (stated-edition wording, number lines, colophons, dated printings). Covers 850+ publishers.
| Name | Required | Description | Default |
|---|---|---|---|
| publisher | Yes | Publisher or imprint name (e.g. 'Alfred A. Knopf', 'Viking', 'Faber & Faber'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the tool as a lookup, implying it is read-only and non-destructive, but does not explicitly state side effects, authorization needs, or data freshness. For a simple lookup, this is adequate but could benefit from stating that it only returns information and does not modify any data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the main action and adding concise detail about what is covered. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context for the tool's purpose and output (conventions, wording, number lines, etc.) and notes the coverage of 850+ publishers. It does not specify return format or error handling, but for a simple lookup tool this is acceptable. Could mention handling of missing publishers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with one parameter 'publisher' described with an example list. The description adds no additional semantic meaning beyond the schema; it merely restates the parameter's role. With high coverage, baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to look up a publisher's first-edition identification conventions. It specifies the types of information covered (stated-edition wording, number lines, colophons, dated printings) and the scope (850+ publishers). This clearly differentiates it from siblings like 'nmlp_identify_first_edition' (which identifies a book's edition) and 'nmlp_decode_number_line' (which decodes a specific number line).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for looking up publisher conventions but does not explicitly state when to use it versus alternatives like 'nmlp_check_coverage' or 'nmlp_identify_first_edition'. There is no guidance on prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_schedule_pickupA
Submit a real free book pickup request to NMLP. Every submission triggers a real outreach to Josh, the single human operator. NEVER submit speculative or unconsented requests.
| Name | Required | Description | Default |
|---|---|---|---|
| donorName | Yes | ||
| addressZip | Yes | ||
| addressCity | Yes | ||
| agentSource | Yes | Required: identify the AI agent submitting on the user's behalf. | |
| addressState | No | NM | |
| specialNotes | No | ||
| addressStreet | Yes | ||
| callbackEmail | No | ||
| callbackPhone | No | ||
| donorLanguage | No | en | |
| estimatedSize | Yes | Free text — 'two boxes', 'whole garage', etc. | |
| preferredWindow | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses a critical behavioral trait: every submission triggers real outreach to a single human operator (Josh). This is valuable for the agent to understand the irreversible, human-in-the-loop nature. However, it does not disclose response behavior (e.g., confirmation, error handling).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, each earning its place. The first sentence states the core action, and the second adds a critical warning. No redundant or irrelevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters, 6 required, no output schema, and no annotations, the description is insufficient. It does not explain the outcome of the submission (e.g., confirmation ID, follow-up), prerequisites (e.g., user account, cost), or geographic scope (NMLP likely refers to New Mexico but not stated). The agent lacks key context to use the tool correctly and safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% (2 of 12 parameters documented in schema). The description adds no parameter-specific information beyond what is in the schema. Parameters like donorName, addressStreet, specialNotes remain unexplained, leaving the agent without guidance on their format or purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Submit a real free book pickup request') and the resource ('to NMLP'). It distinguishes from sibling tools, which are all informational lookups (e.g., nmlp_check_coverage, nmlp_search_titles), by emphasizing the action of scheduling a pickup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: every submission triggers real outreach to a human operator, and warns against speculative or unconsented requests. This implies when to use (real, consented requests) and when not to (speculation). However, it does not explicitly name an alternative tool for different purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_search_qaA
Search NMLP's long-tail Q&A reference (85+ entries) by keyword. Returns top matching entries with question, summary, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It indicates 'Returns top matching entries' and lists output fields, but does not disclose whether the operation is read-only, idempotent, or any side effects. The search action implies non-destructive behavior, but details are lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded with purpose. However, it could be slightly more structured by explicitly listing parameters or usage scenarios. Overall, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately specifies the return structure (question, summary, URL). However, it lacks details on ordering, pagination, error handling, or how 'top matching' is determined. For a search tool with two parameters and siblings, more context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only mentions 'by keyword', which relates to the 'query' parameter, but does not explain the 'limit' parameter (shown in schema with default 5, max 20). The description adds minimal value beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search', specifies the resource 'NMLP's long-tail Q&A reference (85+ entries)', and describes the output format 'question, summary, and URL'. This distinguishes it from sibling tools like nmlp_search_titles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for keyword-based Q&A searching but does not explicitly state when to use this tool versus alternatives (e.g., nmlp_search_titles for book titles). No 'when not to use' or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmlp_search_titlesA
Search the first-edition title reference by title or author. Returns matching collectible titles with their per-title identification-page URLs. Use nmlp_identify_first_edition for the full points of one specific title.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It mentions searching and returning URLs but omits read-only nature, rate limits, ordering, or pagination behaviors. The description provides basic functionality but lacks deeper behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first defines the action and output, second directs to an alternative. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main purpose and sibling reference, but omits details about return structure (beyond URLs), limit behavior, and potential edge cases. For a simple search tool, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It only explains that 'query' is searched by title or author, but does not describe the 'limit' parameter at all. Partial coverage leaves ambiguity for the limit behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches a reference by title or author and returns matching titles with URLs. It also distinguishes itself from the sibling nmlp_identify_first_edition, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use nmlp_identify_first_edition for full details on a specific title, providing clear context on when to use this tool versus an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose, covering different aspects: coverage check, pickup scheduling, various reference lookups, and first-edition identification. No two tools overlap in functionality.
All tools follow a consistent 'nmlp_verb_noun' pattern in snake_case. The verbs are appropriate and uniform (get, check, decode, identify, lookup, schedule, search).
12 tools is well-scoped for the domain—enough to cover key workflows (coverage check, scheduling, identification, reference) without being excessive.
The tool set covers the full expected workflow: pre-pickup coverage check, scheduling, and a comprehensive set of reference tools for book identification and organizational info. No obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Altmetric APIs - track research attention across news, policy, social media, and more
Auditable MCP server for PubMed, Europe PMC, ClinicalTrials.gov, and bioRxiv/medRxiv queries
Hosted MCP server for finding authoritative primary data sources and official portals.
BookBrainz MCP — open book metadata (MetaBrainz / sister of MusicBrainz)
Related MCP Servers
- AlicenseAqualityAmaintenanceComprehensive MCP server for academic research workflows, enabling paper searching across multiple sources, manuscript processing with citation placeholders, search caching, and citation export.11MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for searching academic, patent, and web sources, normalizing identifiers, and managing workspace records. Exposes the same operations to AI clients via MCP tools.37MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for automated quality audit and corpus navigation of the Herculaneum scrolls, exposing scroll metadata, transcriptions, CT volumes, ML models, and documentation.MIT
- AlicenseAqualityBmaintenanceMCP server and CLI for full-text search of the Deutsches Zeitungsportal (German newspaper collection), enabling querying ~33.8 million digitized pages with Solr syntax, date/title/place filters, and snippet highlights.3Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/joshseane/-nmlp-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server