Jamf Docs MCP Server
Enables AI assistants to search, retrieve, and navigate official Jamf documentation.
Search docs across 28 Jamf products with filters (product, topic, docType, version, language) and pagination
Retrieve full articles as markdown/JSON with section extraction, summary-only previews, and token limits
List supported products, publications, topics, and document type filters
Fetch tables of contents for any product or publication
Batch-fetch up to 10 articles in a single call
Look up Jamf glossary terms with fuzzy matching
Access MCP resources (product lists, topics, per-product TOC/version templates)
Use guided prompt workflows for troubleshooting, setup guides, and version comparison
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Jamf Docs MCP ServerHow do I configure SSO in Jamf Pro?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Jamf Docs MCP Server
An MCP server that gives AI assistants (Claude, Cursor, etc.) direct access to Jamf official documentation. Ask Jamf-related questions and get answers based on the latest docs from learn.jamf.com.
Supported Products (28): Jamf Pro, Jamf School, Jamf Connect, Jamf Protect, Jamf Now, Jamf Safe Internet, Jamf Insights, RapidIdentity, Jamf Trust, Jamf Routines, Self Service+, Jamf App Catalog, Jamf Account, Jamf Security Cloud, Elevate, Composer, Jamf Parent, Jamf Teacher, Jamf Setup and Reset, Jamf Assessment, Title Editor, Jamf Infrastructure Manager, Jamf AD CS Connector, Jamf PKI Proxy, Jamf Migrate, Jamf Remote Assist, Jamf Cloud Distribution Service, Healthcare Listener
Installation
@modelcontextprotocol/server is a peer dependency, and the CLI imports it
at startup (dist/index.js → @modelcontextprotocol/server/stdio). If it is
missing from the install tree the process exits immediately with
ERR_MODULE_NOT_FOUND — the install itself succeeds, so the failure only
shows up when you run the server.
Most install paths bring it in automatically:
Install method | Peer installed |
| Yes |
| Yes |
| Yes |
| No |
Yarn 1 (classic) | No |
If you use one of the last two — or if you are vendoring the package — install the SDK alongside it:
npm install @get-technology-inc/jamf-docs-mcp-server @modelcontextprotocol/server@^2Why it is a peer dependency, not a regular one. This package hands
McpServer instances to its consumers, and those consumers pass them to
createMcpHandler from their own SDK copy. If the two resolve to different
copies of the SDK, an instance built by one module's Protocol is inspected by
another's, and every 2026-07-28 request fails with
Cannot read properties of undefined (reading 'includes') — an HTTP 500 with
no useful diagnostic. Declaring the SDK as a peer states the single-copy
requirement instead of relying on the consumer's tree happening to hoist it;
listing it under dependencies as well would reintroduce exactly the duplicate
it exists to prevent.
Node.js 20 or newer is required.
Related MCP server: Apple Dev MCP Server
Quick Start
Claude Desktop
Edit claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"jamf-docs": {
"command": "npx",
"args": ["-y", "@get-technology-inc/jamf-docs-mcp-server"]
}
}
}Restart Claude Desktop to apply.
Claude Code (CLI)
claude mcp add jamf-docs -- npx -y @get-technology-inc/jamf-docs-mcp-serverCursor
Edit ~/.cursor/mcp.json:
{
"mcpServers": {
"jamf-docs": {
"command": "npx",
"args": ["-y", "@get-technology-inc/jamf-docs-mcp-server"]
}
}
}Verify Installation
Test with MCP Inspector:
npx @modelcontextprotocol/inspector npx -y @get-technology-inc/jamf-docs-mcp-serverUsage Examples
Once configured, just ask your AI assistant:
"How do I configure SSO in Jamf Pro?"
"What are the system requirements for Jamf Protect?"
"Explain the MDM enrollment process"
"What changed in the latest Jamf Connect release notes?"
Available Tools
Tool | Description |
| List all supported products, topics, and document type filters |
| Search documentation by keyword with filtering and pagination |
| Retrieve full content of a specific documentation article |
| Browse the table of contents for a product or any single publication |
| Fetch multiple articles in one call (up to 10 URLs) |
| Look up Jamf terminology and definitions (fuzzy matching) |
jamf_docs_list_products
Returns all available Jamf products and their IDs, available topic filters, and document type filters.
Parameter | Type | Default | Description |
| string |
| Documentation language/locale |
|
|
| Detail level of the response |
|
|
| Output format |
| number (100–20000) |
| Maximum tokens in response |
jamf_docs_search
Searches across all Jamf product documentation.
Parameter | Type | Default | Description |
| string (2–200 chars) | required | Search keywords |
| string | — | Filter by product ID (e.g., |
| string | — | Filter by topic category (e.g., |
| string | — | Filter by document type: |
| string | — | Filter by version (e.g., |
| string |
| Documentation language/locale |
| number (1–50) |
| Results per page |
| number (1–100) |
| Page number for pagination |
| number (100–20000) |
| Maximum tokens in response |
|
|
| Detail level; use |
|
|
| Output format |
jamf_docs_get_article
Fetches and converts a documentation article to clean markdown or JSON.
Parameter | Type | Default | Description |
| string | required | Full URL from |
| string | — | Extract only a named section (e.g., |
| boolean |
| Return only article outline — token-efficient way to preview before fetching full content |
| boolean |
| Include links to related articles |
| string |
| Documentation language/locale |
| number (100–20000) |
| Maximum tokens in response |
|
|
| Detail level; |
|
|
| Output format |
When content exceeds maxTokens, the tool truncates the response and lists all available sections with their token counts. Use the section parameter on a follow-up call to retrieve a specific part.
jamf_docs_get_toc
Retrieves the navigation structure (table of contents) for a product.
Parameter | Type | Default | Description |
| string | required | Product ID (see supported products below) |
| string | latest | Specific version to fetch |
| string |
| Documentation language/locale |
| number (1–100) |
| Page number for paginated TOC |
| number (100–20000) |
| Maximum tokens in response |
|
|
| Use |
|
|
| Output format |
jamf_docs_batch_get_articles
Fetches multiple documentation articles in a single call. Each URL is fetched concurrently, and invalid domains are reported as per-article errors without failing the entire batch.
Parameter | Type | Default | Description |
| string[] (1–10) | required | Array of Jamf documentation URLs |
| number (1–5) |
| Maximum parallel requests |
| string |
| Documentation language/locale |
| number (100–20000) |
| Total token budget across all articles |
|
|
| Detail level per article |
|
|
| Output format |
jamf_docs_glossary_lookup
Looks up a term in the Jamf official glossary and returns matching definitions using fuzzy matching. Glossary content is currently English-only; non-English language values are accepted but results will be in English.
Parameter | Type | Default | Description |
| string (2–100 chars) | required | Glossary term to look up |
| string | — | Filter by product ID |
| string |
| Documentation language/locale (glossary is English-only) |
| number (100–50000) |
| Maximum tokens in response |
|
|
| Detail level |
|
|
| Output format |
MCP Resources
Static and dynamic reference data accessible without tool calls:
Resource | URI | Description |
Products list |
| All available Jamf products with IDs and version info (fetched dynamically from API) |
Topics list |
| Topic categories for filtering documentation searches |
Product TOC |
| Table of contents for a specific product (template resource) |
Product versions |
| Available documentation versions for a specific product (template resource) |
Template resources support tab-completion on productId in compatible clients.
MCP Prompts
Pre-built prompt workflows that guide the AI through multi-step documentation tasks:
jamf_troubleshoot
Guides the AI through a structured troubleshooting workflow: searching for relevant documentation, previewing articles with summaryOnly, then providing a root-cause diagnosis and step-by-step resolution.
Argument | Type | Description |
| string (required) | Description of the issue to troubleshoot |
| string (optional) | Jamf product ID to scope the search |
jamf_setup_guide
Directs the AI to generate a step-by-step setup guide for a Jamf feature, including prerequisites, configuration steps, and verification.
Argument | Type | Description |
| string (required) | The feature or capability to set up |
| string (optional) | Jamf product ID to scope the search |
jamf_compare_versions
Instructs the AI to compare table-of-contents structures and key articles between two product versions, summarizing new features, removed capabilities, and migration considerations.
Argument | Type | Description |
| string (required) | Jamf product ID |
| string (required) | First version to compare (e.g., |
| string (required) | Second version to compare (e.g., |
Supported Products
Product ID | Name | Description |
| Jamf Pro | Apple device management for enterprise |
| Jamf School | Apple device management for education |
| Jamf Connect | Identity and access management |
| Jamf Protect | Endpoint security for Apple |
| Jamf Now | Simple Apple device management for small businesses |
| Jamf Safe Internet | Content filtering and web security for education and business |
| Jamf Insights | Analytics and reporting platform for Apple fleet |
| RapidIdentity | Identity and access management platform |
| Jamf Trust | Zero-trust network access for Apple devices |
| Jamf Routines | Automated workflow orchestration for device management |
| Self Service+ | Next-generation self-service portal for macOS and mobile |
| Jamf App Catalog | Curated application catalog for managed deployments |
| Jamf Account | Identity, licensing, and platform services portal |
| Jamf Security Cloud | Cloud security portal for Jamf Connect and Jamf Protect |
| Elevate | Guided remediation and device health portal |
| Composer | macOS package building and editing |
| Jamf Parent | Parental device controls for school-issued devices |
| Jamf Teacher | Classroom device management for teachers |
| Jamf Setup and Reset | Device personalisation and wipe-and-reprovision apps |
| Jamf Assessment | Locked-down assessment mode for education devices |
| Title Editor | Custom software title patch definitions |
| Jamf Infrastructure Manager | On-premises proxy for LDAP and other internal services |
| Jamf AD CS Connector | Certificate issuance via Active Directory Certificate Services |
| Jamf PKI Proxy | Proxy for certificate authorities behind a firewall |
| Jamf Migrate | Migrating macOS devices between Jamf Pro instances |
| Jamf Remote Assist | Remote screen sharing and support sessions |
| Jamf Cloud Distribution Service | Jamf-hosted package distribution (JCDS) |
| Healthcare Listener | Integration with healthcare information systems |
Key Features
Compact Mode: Use
outputMode: "compact"for token-efficient responses; articles show a ~500-token preview with an available sections listSummary Only: Use
summaryOnly: trueonjamf_docs_get_articleto preview an article outline before fetching full contentSection Extraction: Use
section: "Prerequisites"to retrieve only the part of an article you needBatch Fetching: Use
jamf_docs_batch_get_articlesto fetch up to 10 articles in one call with concurrent requestsGlossary Lookup: Use
jamf_docs_glossary_lookupto look up Jamf terminology with fuzzy matchingMulti-language: All tools accept a
languageparameter for localized documentation (e.g.,ja-JP,de-DE)Document Type Filter: Use
docTypeonjamf_docs_searchto narrow results todocumentation,release-notes,training,solution-guide,glossary, orgetting-startedVersion Query: Use the
versionparameter to query documentation for a specific product versionPagination: Search results support
pageandlimit; table of contents supportspage; product lists are not paginatedSearch Suggestions: Receive helpful suggestions when a search returns no results
Token Management: All tools accept a
maxTokensparameter (100–20000, default 5000) to control response size
MCP Apps (interactive viewer)
Hosts that negotiate the MCP Apps extension (io.modelcontextprotocol/ui) render
jamf_docs_search, jamf_docs_get_toc and jamf_docs_get_article results as an
interactive viewer instead of plain markdown: search hits are clickable through to
the article, TOC entries open in place, and articles carry section navigation and a
back stack. All three tools reference one self-contained ui:// resource, whose
URI carries a hash of the bundle it names (ui://jamf-docs/app-<hash>.html).
Hosts that do not negotiate the extension ignore the metadata and get exactly the
markdown they always did.
The resource is served with a 24-hour public cache hint, which is safe precisely
because the URI is content-addressed: a given URI names one exact bundle forever,
and a new bundle arrives under a new URI rather than replacing an old one. Hosts
pick up a changed viewer on their next tools/list refresh.
Design
The viewer paints no background and owns no colour. It reads the host's theme,
design tokens and fonts out of hostContext (applyDocumentTheme,
applyHostStyleVariables, applyHostFonts) and builds every rule from those,
so the panel is a piece of the host's surface rather than a web page embedded in
one. app-ui/styles.ts carries a :root fallback for each token, because hosts
may send any subset of the 76 style variables.
Before 5.10 it did the opposite: a hardcoded palette with a
prefers-color-scheme dark block. That media query reports the operating
system, not the host — so a user running Claude in dark mode on a light OS got
a white slab in a dark conversation, and no tuning of the greys could fix it.
Inline and fullscreen
The two display modes render different things, because Claude's design guidelines make them different surfaces. An inline card is a compact summary that fits its own content; fullscreen is where a documentation browser lives.
Inline | Fullscreen | |
Search hits | 3 | the page |
Table-of-contents rows | 8 | the page |
Article prose | 3 blocks, stopping before any table or code block | whole |
Breadcrumbs, Back, parent link | — | ✓ |
Section rail, neighbour list | — | ✓ |
Type-ahead filter, paging | — | ✓ |
Actions | 1 | as needed |
Opening a result from an inline panel sends ui/request-display-mode before
the tools/call, so the article arrives in the mode built for it. A host that
declines, or that offers no fullscreen, still gets the article in place.
Two documented constraints drive this.
Inline apps must not scroll internally. On a touch device the conversation view owns vertical panning, so a vertical gesture starting inside an inline app is handed to the conversation — an internal scroll container does not scroll at all, and everything past the host's cap becomes unreachable rather than below the fold. Bounding what is rendered instead keeps search at ~518px, the table of contents at ~373px and an article at ~554px, all fully visible.
Inline apps must not drill in. "Drill-ins, breadcrumbs, or multiple views" are named patterns to avoid, which is why every piece of navigation chrome above is fullscreen-only.
The article preview is counted in blocks rather than characters. A character budget does not predict height: 900 characters of prose is three short paragraphs, and 900 characters containing a settings table is 700px of panel.
Style variables in app-ui/styles.ts are transcribed from the same guidelines.
Article navigation
jamf_docs_get_article publishes navigation — parent, siblings,
children, and the true totals alongside the (capped) lists.
This matters more than it sounds. Fluid Topics serves one topic per API call
while learn.jamf.com concatenates a topic and its children into a single page,
so every <h2> a reader sees on the site is a separate topic here — verified at
9 of 9 on "Computer Configuration Profiles", whose API payload contains zero
heading tags of any level. Without navigation, a client showing that page has
the introduction and no route to the nine procedures the page consists of on the
website. The viewer renders them as In this section.
It is derived from the map's TOC index, which the breadcrumb lookup already fetches and caches, so an article pays no extra request for it.
Developing the viewer
npm run dev:app-ui # http://127.0.0.1:5173 — edit app-ui/*.ts, the frame reloadsapp-ui/dev/harness.ts is a local MCP Apps host built on the SDK's AppBridge,
which accepts Client | null — a host with no server behind it is a supported
mode. It speaks the real protocol to the real App class and answers
tools/call out of app-ui/dev/fixtures.json, real structuredContent
captured from the live tools by npm run fixtures:app-ui.
It exists because the viewer only runs inside a host, so there is nothing to
look at without one, and the alternative loop — build, launch the Inspector,
click through — is tens of seconds per edit. It also does three things no
inspector can: strip hostContext.styles entirely (the check that proves the
:root fallbacks are coherent as a set), resize the container continuously
across the @container breakpoints, and lie about deviceCapabilities.hover.
Before shipping, run the viewer through the real thing as well — it is the only
place the actual ui:// resource, CSP and _meta are exercised:
npm run build && npm run test:inspectorThe MCP Apps viewer is broken in 4.0.0 — upgrade past it. The build step that
inlines the UI bundle into the HTML document used a replacement string, so every
$ pattern in the minified JavaScript was expanded instead of copied. The
document that shipped is not parseable JavaScript, and a host that renders it gets
SyntaxError: missing ) after argument list and a blank panel. Nothing else in
4.0.0 is affected — tools, resources and prompts return the same results either
way, since a host that cannot render the app falls back to the markdown. Fixed in
4.0.1.
4.0.1 alone did not reach every host. Up to and including 4.0.1 the resource
lived at a fixed ui://jamf-docs/app.html with a 24-hour public cache hint, so a
host that had read the broken 4.0.0 bundle kept serving it from cache for up to a
day after the server was upgraded — the corrected bundle was published under the
same URI and never fetched. Upgrading past 4.0.1 fixes the distribution as well as
the bundle: the URI now changes with the content, so a host holding the 4.0.0 copy
simply stops asking for it. No manual cache clearing is needed, and the remaining
delay is the one-hour tools/list hint rather than 24 hours.
HTTP/SSE Transport Mode
In addition to the default stdio transport, the server supports an HTTP transport for use as a remote or shared MCP endpoint.
Starting the HTTP Server
# Using the npm script (defaults: localhost:3000)
npm run start:http
# Using the built binary directly with custom options
node dist/index.js --transport http --port 8080 --host 127.0.0.1CLI Arguments
Argument | Default | Description |
|
| Transport mode: |
|
| Port to listen on (1–65535) |
|
| Host to bind to |
Security note: The default host
127.0.0.1restricts access to localhost only. Binding to0.0.0.0exposes the server to the network; only do this in controlled environments.
HTTP Endpoints
Endpoint | Method | Description |
|
| MCP JSON-RPC endpoint (streamable HTTP transport) |
|
| Health check — returns |
Connecting an MCP Client via HTTP
Claude Desktop or other MCP clients that support HTTP transport can connect with:
{
"mcpServers": {
"jamf-docs": {
"url": "http://127.0.0.1:3000/mcp"
}
}
}CORS Configuration
By default the server does not set CORS headers (cross-origin requests are blocked). To allow specific origins, set the CORS_ALLOWED_ORIGINS environment variable:
CORS_ALLOWED_ORIGINS=https://myapp.example.com node dist/index.js --transport httpMultiple origins are separated by commas.
Rate Limiting
The HTTP server applies per-IP token-bucket rate limiting. The default is 60 requests per minute. Override with the RATE_LIMIT_RPM environment variable.
Configuration
All settings are optional. Set them as environment variables before launching the server.
Cache Settings
Variable | Default | Range | Description |
|
| — | Cache directory (relative paths must stay within the project; sensitive system paths are rejected) |
|
| 1 min–30 days | TTL for search result cache entries |
|
| 1 min–30 days | TTL for article content cache entries |
|
| 1 min–30 days | TTL for product list cache entries |
|
| 1 min–30 days | TTL for table of contents cache entries |
|
| 10–10000 | Maximum number of entries kept in the in-memory cache |
Request Settings
Variable | Default | Range | Description |
|
| 1000–60000 ms | HTTP request timeout |
|
| 0–10 | Number of retry attempts on failure |
|
| 100–30000 ms | Delay between retries |
|
| 0–10000 ms | Delay between outbound requests (politeness) |
|
| — | User-Agent header sent to learn.jamf.com |
HTTP Transport Settings
Variable | Default | Range | Description |
|
| 1–10000 | Inbound requests per minute per IP (HTTP transport only) |
| `` (empty) | — | Comma-separated list of allowed CORS origins (HTTP transport only) |
Development
git clone https://github.com/GET-Technology-Inc/jamf-docs-mcp-server.git
cd jamf-docs-mcp-server
npm install
npm run dev # stdio mode with file watching
npm run start:http # HTTP transport modeAvailable Scripts
Script | Description |
| Compile TypeScript to |
| Development mode with auto-reload (stdio) |
| Live preview of the MCP Apps viewer at http://127.0.0.1:5173 |
| Re-capture the viewer's fixtures from the live tools |
| Start HTTP/SSE transport mode |
| Run all tests |
| Unit tests only |
| Integration tests only |
| End-to-end tests only |
| Test coverage report |
| Launch MCP Inspector against local build |
| Lint source files |
| TypeScript type check without emitting |
License
MIT - Copyright (c) 2025 GET Technology Inc.
Disclaimer
This is an unofficial tool and is not affiliated with Jamf.
Links
Available Tools
6 toolsjamf_docs_batch_get_articlesBatch Get Jamf Documentation ArticlesARead-onlyIdempotent
Retrieve multiple Jamf documentation articles in a single request.
Fetches up to 10 articles in parallel with concurrency control. Useful for comparing articles, gathering information from multiple pages, or bulk research.
Args:
urls (string[], required): Array of 1-10 article URLs (must be from docs.jamf.com or learn.jamf.com)
concurrency (number, optional): Max parallel requests 1-5 (default: 3)
maxTokens (number, optional): Total token budget across all articles 100-50000 (default: 5000). Distributed evenly.
outputMode ('full' | 'compact'): Output detail level (default: 'full'). Use 'compact' for brief output.
responseFormat ('markdown' | 'json'): Output format (default: 'markdown')
Returns: An array of article results. Each article independently succeeds or fails. For JSON format, returns a BatchResponse object with results, summary, and tokenInfo.
Examples:
Compare two products: urls=["https://learn.jamf.com/.../page/A.html", "https://learn.jamf.com/.../page/B.html"]
Bulk fetch with compact output: urls=[...], outputMode="compact", maxTokens=10000
Note: Token budget is split evenly across articles. Use higher maxTokens for more articles. Partial failures are reported per-article without failing the entire batch.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Array of Jamf documentation article URLs (1-10) | |
| language | No | Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN | |
| maxTokens | No | Total token budget across all articles (100-50000, default: 5000) | |
| outputMode | No | Output detail level: "full" for detailed output or "compact" for brief output | full |
| concurrency | No | Maximum parallel requests (1-5, default: 3) | |
| responseFormat | No | Output format: "markdown" for human-readable or "json" for machine-readable | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds transparency about per-article failure handling and token budget distribution. It does not disclose rate limits or error specifics, but given the annotations cover the core safety profile, the added context on partial failures is a meaningful bonus.
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 well-structured with sections for args, examples, and notes. It contains some redundancy (repeating schema parameter details), but the examples and the final note are concise and actionable, making the overall organization effective without excessive verbosity.
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 the tool's complexity (6 parameters, 3 enums), the description covers the essential operational aspects: examples, concurrency, token management, and failure semantics. It does not elaborate on the output schema structure, but the presence of an output schema and the description's mention of 'array of article results' is sufficient for an agent to understand the expected return.
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 schema provides full descriptions for all parameters (100% coverage), so the baseline is 3. The description adds valuable context beyond the schema, such as the note that 'Token budget is split evenly across articles' and guidance to 'Use higher maxTokens for more articles,' which deepens understanding of the maxTokens 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: 'Retrieve multiple Jamf documentation articles in a single request.' It also distinguishes itself from single-article retrieval by emphasizing the batch nature, which is reinforced by the tool name and the explicit mention of 'batch.'
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 examples, explains token budget splitting, and mentions partial failures. It implicitly suggests use cases (comparing articles, bulk research) but does not explicitly contrast with the single-article sibling tool (jamf_docs_get_article), leaving the 'when not to use' slightly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jamf_docs_get_articleGet Jamf Documentation ArticleARead-onlyIdempotent
Retrieve the full content of a specific Jamf documentation article.
This tool fetches and parses a Jamf documentation article, converting it to a clean, readable format. Works with any article from docs.jamf.com or learn.jamf.com.
Args:
url (string, required): Full URL of the article (must be from docs.jamf.com or learn.jamf.com)
section (string, optional): Extract only a specific section by title or ID (e.g., "Prerequisites", "Configuration")
summaryOnly (boolean, optional): Return only article summary and outline instead of full content (default: false). Token-efficient way to preview an article
includeRelated (boolean, optional): Include links to related articles (default: false)
maxTokens (number, optional): Maximum tokens in response 100-50000 (default: 5000)
outputMode ('full' | 'compact'): Output detail level (default: 'full'). Use 'compact' for brief output
responseFormat ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON format: { "title": string, "content": string, "url": string, "product": string, "version": string, "breadcrumb": string[], "relatedArticles": [...], "tokenInfo": { "tokenCount": number, "truncated": boolean, "maxTokens": number }, "sections": [ { "id": string, "title": string, "level": number, "tokenCount": number } ] }
For Markdown format: The article content with token info and available sections.
Examples:
Get full article: url="https://learn.jamf.com/en-US/bundle/jamf-pro-documentation/page/Configuration_Profiles.html"
Get specific section: url="...", section="Prerequisites"
Limit response size: url="...", maxTokens=2000
Errors:
"Article not found (404)" if the URL returns a 404 error
"Invalid URL" if the URL is not from docs.jamf.com or learn.jamf.com
"Section not found" if the specified section doesn't exist (will list available sections)
Note: Large articles are intelligently truncated with remaining sections listed.
Use the section parameter to retrieve specific sections for long articles.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full URL of the Jamf documentation article. Alternative: use mapId + contentId for direct fetch. | |
| mapId | No | Fluid Topics map ID (from search results or TOC). Use with contentId for direct fetch. | |
| section | No | Extract only a specific section by title or ID (e.g., "Prerequisites", "Configuration") | |
| language | No | Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN | |
| contentId | No | Fluid Topics content ID (from search results or TOC). Use with mapId for direct fetch. | |
| maxTokens | No | Maximum tokens in response (100-50000, default: 5000) | |
| outputMode | No | Output detail level: "full" for detailed output or "compact" for brief output | full |
| summaryOnly | No | Return only article summary and outline instead of full content (token-efficient) | |
| includeRelated | No | Include related article links in the response | |
| responseFormat | No | Output format: "markdown" for human-readable or "json" for machine-readable | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| mapId | No | |
| title | Yes | |
| content | Yes | |
| product | No | |
| version | No | |
| sections | Yes | |
| contentId | No | |
| truncated | Yes | |
| breadcrumb | No | |
| navigation | No | |
| tokenCount | No | |
| lastUpdated | No | |
| contentLocale | No | |
| versionStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavior beyond annotations: truncation of large articles with remaining sections listed, error handling (404, invalid URL, section not found), token info in response, and output format options. This is thorough and consistent with 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 long but well-organized with clear headings (Args, Returns, Examples, Errors, Note). It front-loads the purpose and each section serves a distinct role. Some redundancy exists (e.g., outputMode and responseFormat are explained both in Args and Returns), but overall it is efficient for a tool with 10 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 the tool's complexity (10 parameters, output schema, multiple output modes), the description is exceptionally complete. It covers error cases, truncation behavior, token limits, parameter alternatives (url vs mapId/contentId), and includes concrete examples. The presence of an output schema reduces the need to explain return values, but the description still elaborates sufficiently. No critical information is missing.
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% with all parameters described. The description adds some context (e.g., summaryOnly as a 'token-efficient way to preview', maxTokens range, section extraction behavior) and examples, but largely reinforces the schema. No missing parameter semantics beyond what the schema provides, so a baseline of 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 action ('Retrieve the full content of a specific Jamf documentation article') with a specific resource (Jamf documentation article). It distinguishes this from siblings like search, TOC, glossary, and batch fetch by focusing on a single article retrieval. No ambiguity.
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 gives extensive how-to guidance (URL vs mapId/contentId, section extraction, summaryOnly, maxTokens, etc.) but does not explicitly contrast this tool with siblings like jamf_docs_search or jamf_docs_batch_get_articles. It does not state when to prefer this over alternatives, though the purpose is clear enough to infer most usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jamf_docs_get_tocGet Documentation Table of ContentsARead-onlyIdempotent
Get the table of contents for Jamf documentation.
Browse the navigation structure of either a Jamf product or any single Jamf
publication - release notes, technical papers, courses, evaluation guides and
configuration guides all live on the publication axis rather than the product
one. Exactly one of product and publication is required.
Args:
product (string): Product ID - one of: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog, jamf-account, jamf-security-cloud, elevate, composer, jamf-parent, jamf-teacher, jamf-setup-reset, jamf-assessment, title-editor, jamf-infrastructure-manager, jamf-adcs-connector, jamf-pki-proxy, jamf-migrate, jamf-remote-assist, jamf-cloud-distribution-service, healthcare-listener
publication (string): Bundle family id of any single publication, e.g. "technical-paper-laps" or "jamf-pro-release-notes". Call jamf_docs_list_products for the available ids
version (string, optional): Specific version (defaults to latest)
page (number, optional): Page number for pagination 1-100 (default: 1)
maxTokens (number, optional): Maximum tokens in response 100-50000 (default: 5000)
outputMode ('full' | 'compact'): Output detail level (default: 'full'). Use 'compact' for flat list without nested children
responseFormat ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON format: { "product": string, "productId": string, // present when addressed by product "publicationId": string, // present when addressed by publication "version": string, "mapId": string, // omitted when the map could not be resolved "toc": [...], // each entry carries title, url and contentId "tokenInfo": { "tokenCount": number, "truncated": boolean, "maxTokens": number }, "pagination": { "page": number, "pageSize": number, "totalPages": number, "totalItems": number, "hasNext": boolean, "hasPrev": boolean } }
For Markdown format: A hierarchical list of documentation topics with pagination and token info.
Examples:
Browse Jamf Pro documentation: product="jamf-pro"
Get page 2 of TOC: product="jamf-pro", page=2
Limit response size: product="jamf-pro", maxTokens=2000
Errors:
"Invalid product ID" if the product is not recognized
"Version not found" if the specified version doesn't exist
Note: Use this to discover what topics are available before searching or retrieving specific articles. Large TOCs are paginated. The response-level mapId and an entry's contentId together form the pair jamf_docs_get_article accepts for a direct fetch. Markdown output shows the mapId only; use responseFormat="json" (or read structuredContent) for the per-entry contentIds. structuredContent.entries is the TOC flattened in document order and always carries every descendant; each entry's depth (0 for top level) is what restores the nesting. The markdown is not the same view: outputMode="full" shows that nesting as indentation, while outputMode="compact" lists only the top-level entries and shows no nesting at all.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (1-100, default: 1) | |
| product | No | Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog, jamf-account, jamf-security-cloud, elevate, composer, jamf-parent, jamf-teacher, jamf-setup-reset, jamf-assessment, title-editor, jamf-infrastructure-manager, jamf-adcs-connector, jamf-pki-proxy, jamf-migrate, jamf-remote-assist, jamf-cloud-distribution-service, healthcare-listener | |
| version | No | Specific version (e.g. "11.13.0"); defaults to latest | |
| language | No | Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN | |
| maxTokens | No | Maximum tokens in response (100-50000, default: 5000) | |
| outputMode | No | Output detail level: "full" for detailed output or "compact" for brief output | full |
| publication | No | Bundle family id for any Jamf publication, e.g. "technical-paper-laps" or "jamf-pro-release-notes". Use this for the documents that are not one of the products in `product` — release notes, technical papers, courses, evaluation and configuration guides. Exactly one of `product` or `publication` is required. Call jamf_docs_list_products to see the available ids. | |
| responseFormat | No | Output format: "markdown" for human-readable or "json" for machine-readable | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| mapId | No | |
| entries | Yes | |
| hasMore | Yes | |
| product | Yes | |
| version | Yes | |
| productId | No | |
| localeNote | No | |
| totalPages | Yes | |
| versionNote | No | |
| totalEntries | Yes | |
| publicationId | No | |
| paginationNote | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive. The description adds substantial context: pagination behavior, token limits, output modes, structuredContent semantics, and the mapId/contentId pairing for get_article. It also lists errors. No contradiction.
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 well-organized but verbose. It repeats parameter details already in the schema (e.g., full product list), which is redundant. However, it front-loads purpose and includes valuable examples and notes, so it earns its length despite some redundancy.
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 the 8-parameter tool with output schema and annotations, the description is exceptionally complete. It covers purpose, usage, parameters, return format, errors, and the nuanced behavior of structuredContent and output modes. Nothing an agent needs is missing.
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 covers all parameters with descriptions, so baseline is 3. The description adds meaning by explaining the product/publication exclusivity, giving examples of publication ids, clarifying outputMode and responseFormat differences, and detailing pagination and token 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?
States the tool retrieves the table of contents for Jamf documentation, distinguishing between product and publication axes. It clearly indicates this is for browsing navigation structure, distinct from searching or retrieving articles.
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 states exactly one of product or publication is required, and that this should be used before searching or retrieving articles. It also points to jamf_docs_list_products for available ids and mentions get_article for direct fetch, providing clear routing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jamf_docs_glossary_lookupLookup Jamf Glossary TermARead-onlyIdempotent
Look up a term in the Jamf official glossary and get its definition.
This tool searches glossary pages across Jamf product documentation and returns matching term definitions using fuzzy matching.
Note: Glossary content is currently only available in English (en-US). Non-English language parameters are accepted but results will be in English.
Args:
term (string, required): Glossary term to look up (2-100 characters). Supports fuzzy matching.
product (string, optional): Filter by product ID (use jamf_docs_list_products to see all)
language (string, optional): Documentation language/locale (default: en-US). Note: glossary is English-only.
maxTokens (number, optional): Maximum tokens in response 100-50000 (default: 5000)
outputMode ('full' | 'compact'): Output detail level (default: 'full')
responseFormat ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON format: { "term": string, "totalMatches": number, "entries": [{ "term": string, "definition": string, "product": string, "url": string }], "tokenInfo": { "tokenCount": number, "truncated": boolean, "maxTokens": number } }
For Markdown format: A formatted list of glossary definitions with source links.
Examples:
"What is MDM?" → term="MDM"
"Configuration Profile in Jamf Pro" → term="Configuration Profile", product="jamf-pro"
"What does DEP stand for?" → term="DEP"
Errors:
"No matching term found" if no glossary entries match
"Invalid product ID" if product parameter is not recognized
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Glossary term to look up (e.g., "MDM", "Configuration Profile", "Smart Group") | |
| product | No | Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog, jamf-account, jamf-security-cloud, elevate, composer, jamf-parent, jamf-teacher, jamf-setup-reset, jamf-assessment, title-editor, jamf-infrastructure-manager, jamf-adcs-connector, jamf-pki-proxy, jamf-migrate, jamf-remote-assist, jamf-cloud-distribution-service, healthcare-listener | |
| language | No | Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN | |
| maxTokens | No | Maximum tokens in response (100-50000, default: 5000) | |
| outputMode | No | Output detail level: "full" for detailed output or "compact" for brief output | full |
| responseFormat | No | Output format: "markdown" for human-readable or "json" for machine-readable | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| term | Yes | |
| entries | Yes | |
| truncated | Yes | |
| totalMatches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint, and the description adds concrete behavioral details beyond that: fuzzy matching, language acceptance with English-only results, and output format options. This gives an agent a richer understanding of expected behavior without requiring a call.
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 well-organized into sections (description, args, returns, examples, errors) and is free of redundancy. Each sentence serves a purpose, making it concise yet comprehensive. The front-loaded main description gives the essential purpose immediately.
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 the complexity of 6 parameters (with 4 enums) and two output formats, the description covers all necessary aspects: it fully describes each parameter, explains both JSON and Markdown return structures, provides concrete usage examples, and lists possible errors. The provided output schema further enhances completeness, leaving no critical gaps for an agent to call the tool 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?
The input schema already provides 100% coverage with detailed descriptions for every parameter (term, product, language, maxTokens, outputMode, responseFormat). The tool description repeats these details and adds examples, but it does not add substantially new semantic meaning beyond what the schema already conveys, so the baseline of 3 is maintained.
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 function: 'Look up a term in the Jamf official glossary and get its definition.' It specifies a resource (glossary) and a specific action (search/lookup), and its examples further clarify typical use cases. This effectively distinguishes it from the general search and article retrieval siblings.
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 glossary lookups and provides examples, but it does not explicitly state when to prefer this tool over alternatives like jamf_docs_search or jamf_docs_get_article. There is no explicit 'use this when' or 'use instead of' guidance, so a 3 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jamf_docs_list_productsList Jamf ProductsARead-onlyIdempotent
List Jamf products, publications, topics, and documentation versions.
Returns two separate catalogues:
Products: the IDs the
productfilter in jamf_docs_search accepts, and theproductparameter of jamf_docs_get_toc. Jamf Pro, Jamf School, Jamf Connect, Jamf Protect, Jamf Now, Jamf Safe Internet and more.Publications: every document Jamf publishes - release notes, technical papers, courses, evaluation and configuration guides - grouped the way Jamf classifies them. Pass one of these IDs as the
publicationparameter of jamf_docs_get_toc. These are documents, not products, and the searchproductfilter does not take them.
Also lists available topic and docType filters for search.
Args:
maxTokens (number, optional): Maximum tokens in response 100-50000 (default: 10000, higher than other tools because this one answers with a whole catalogue)
outputMode ('full' | 'compact'): Output detail level (default: 'full'). Use 'compact' for brief list
responseFormat ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON format: { "products": [...], "publications": [...], // omitted if the maps registry is unreachable "topics": [...], "tokenInfo": { "tokenCount": number, "truncated": boolean, "maxTokens": number } }
For Markdown format: A formatted list of products and topics with their details.
Examples:
"What Jamf products are available?" → use this tool
"List all Jamf documentation" → use this tool
"What topics can I filter by?" → use this tool
"Where are the Jamf Pro release notes?" → use this tool, then get_toc with the publication ID
Note: This is a read-only operation that does not modify any state.
| Name | Required | Description | Default |
|---|---|---|---|
| maxTokens | No | Maximum tokens in response (100-50000, default: 10000) | |
| outputMode | No | Output detail level: "full" for detailed output or "compact" for brief output | full |
| responseFormat | No | Output format: "markdown" for human-readable or "json" for machine-readable | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| topics | Yes | |
| products | Yes | |
| publications | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description discloses that publications may be omitted if the maps registry is unreachable, and explains why maxTokens default is higher than other tools (because it returns a whole catalogue). These behavioral details add value beyond the structured 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 long but well-structured with clear sections (overview, args, returns, examples). Every sentence serves a purpose—no fluff. The main purpose is front-loaded, and the examples are concise and actionable. For a tool with this complexity, the length is justified and efficiently organized.
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?
Despite having an output schema, the description goes further by showing the JSON return structure, noting the potential omission of publications, and giving example queries. It fully equips an agent to call the tool correctly and interpret the response, leaving no critical gaps.
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% with descriptions for all three parameters, so the baseline is 3. The description adds meaningful context: it explains the maxTokens default is intentionally higher than other tools, recommends 'compact' for brief lists, and clarifies the difference between markdown and json response formats. This goes beyond the schema's basic descriptions.
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 it lists Jamf products, publications, topics, and docTypes, and explicitly distinguishes itself from siblings by explaining how its outputs feed into jamf_docs_search and jamf_docs_get_toc. The verb+resource is specific and 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?
Provides explicit when-to-use guidance via concrete examples ('What Jamf products are available?' → use this tool) and explains how to chain it with jamf_docs_get_toc for release notes. It also clarifies that publications are documents, not products, preventing misuse of the search filter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jamf_docs_searchSearch Jamf DocumentationARead-onlyIdempotent
Search Jamf documentation for articles matching your query.
This tool searches across all Jamf product documentation including Jamf Pro, Jamf School, Jamf Connect, Jamf Protect, Jamf Now, Jamf Safe Internet, and more. Results include article titles, snippets, and direct links.
Args:
query (string, required): Search keywords (2-200 characters)
product (string, optional): Filter by product ID (use jamf_docs_list_products to see all)
topic (string, optional): Filter by topic. Common: enrollment, profiles, policies, packages, scripts, patch, apps, security, filevault, sso, identity-provider, inventory, reports, api, network. See jamf_docs_list_products for the full list of 40 topic IDs.
docType (string, optional): Filter by document type: documentation, release-notes, training, solution-guide, glossary, getting-started
version (string, optional): Filter by version (e.g., "11.5.0", "10.x")
limit (number, optional): Maximum results per page 1-50 (default: 10)
page (number, optional): Page number for pagination 1-100 (default: 1)
maxTokens (number, optional): Maximum tokens in response 100-50000 (default: 5000)
outputMode ('full' | 'compact'): Output detail level (default: 'full'). Use 'compact' for brief, token-efficient output
responseFormat ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON format: { "total": number, "query": string, "results": [...], "tokenInfo": { "tokenCount": number, "truncated": boolean, "maxTokens": number }, "pagination": { "page": number, "pageSize": number, "totalPages": number, "totalItems": number, "hasNext": boolean, "hasPrev": boolean } }
For Markdown format: A formatted list of search results with pagination and token info.
Examples (common query → recommended filters):
"Configure SSO with Okta in Jamf Connect" → query="SSO Okta", product="jamf-connect", topic="sso"
"Set up FileVault encryption" → query="FileVault encryption", product="jamf-pro", topic="filevault"
"Patch macOS apps" → query="patch policy", product="jamf-pro", topic="patch"
"Smart group criteria" → query="smart group criteria", product="jamf-pro", topic="reports"
"Automated Device Enrollment workflow" → query="ADE prestage", product="jamf-pro", topic="enrollment"
"Shared iPad in a classroom" → query="shared iPad classroom", product="jamf-school", topic="education"
"Jamf Protect custom analytic" → query="custom analytic", product="jamf-protect", topic="protect-analytics"
"Jamf Pro REST API authentication" → query="API role bearer token", product="jamf-pro", topic="api"
"Extension attribute scripts" → query="extension attribute script", product="jamf-pro", topic="extension-attributes"
"Paginate through results" → query="policy", page=2
Errors:
"No results found" if search returns empty
"Invalid product ID" if product parameter is not recognized
Note: Results are ranked by relevance. Use filters and pagination to navigate large result sets. Most results carry a mapId + contentId pair; pass both to jamf_docs_get_article to fetch that article directly instead of resolving its URL. The pair is omitted when a result comes from a source that does not resolve one — fall back to the URL in that case.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (1-100, default: 1) | |
| limit | No | Maximum number of results per page (1-50) | |
| query | Yes | Search keywords to find in Jamf documentation | |
| topic | No | Filter by topic. Common: enrollment, profiles, policies, packages, scripts, patch, apps, security, filevault, sso, identity-provider, inventory, reports, api, network. See jamf_docs_list_products for the full list of 40 topic IDs. | |
| docType | No | Filter by document type: documentation, release-notes, training, solution-guide, glossary, getting-started | |
| product | No | Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog, jamf-account, jamf-security-cloud, elevate, composer, jamf-parent, jamf-teacher, jamf-setup-reset, jamf-assessment, title-editor, jamf-infrastructure-manager, jamf-adcs-connector, jamf-pki-proxy, jamf-migrate, jamf-remote-assist, jamf-cloud-distribution-service, healthcare-listener | |
| version | No | Filter by version (e.g., "11.13.0") or "current" | |
| language | No | Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN | |
| maxTokens | No | Maximum tokens in response (100-50000, default: 5000) | |
| outputMode | No | Output detail level: "full" for detailed output or "compact" for brief output | full |
| responseFormat | No | Output format: "markdown" for human-readable or "json" for machine-readable | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| limit | No | |
| query | Yes | |
| filters | No | |
| hasMore | Yes | |
| results | Yes | |
| totalPages | Yes | |
| suggestions | No | |
| versionNote | No | |
| otherSources | No | |
| totalResults | Yes | |
| relevanceNote | No | |
| paginationNote | No | |
| filterRelaxation | No | |
| truncatedContent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses ranking by relevance, pagination behavior, token limits, error messages ('No results found', 'Invalid product ID'), and the fallback to URL when mapId+contentId is absent. This gives the agent a full picture of the tool's runtime behavior without conflicting with 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 long but well-structured with clear sections (Args, Returns, Examples, Errors, Note). It front-loads the core purpose, then systematically covers every parameter, return format, and edge case. Every sentence contributes meaningful information; nothing is redundant or padding.
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 the tool's complexity (11 parameters, output schema, pagination, multiple response formats), the description is remarkably complete. It includes error handling, fallback behavior, examples, and cross-references to sibling tools, leaving no critical information missing for an agent to call 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 description coverage is 100%, but the description adds significant value beyond the schema: it explains the purpose of each filter, provides a curated list of common topic IDs, shows example queries with recommended parameter combinations, and clarifies the mapId/contentId usage. This goes well beyond the schema's dry parameter definitions.
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 opens with a clear statement: 'Search Jamf documentation for articles matching your query.' It names the resource (Jamf documentation) and the verb (search), and distinguishes itself from sibling tools like jamf_docs_get_article (which fetches a specific article) and jamf_docs_list_products (which lists product IDs). The scope across all Jamf product documentation is explicit.
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 guidance on when to use this tool and how to combine it with siblings: it references jamf_docs_list_products for product/topic IDs, and instructs to pass mapId+contentId to jamf_docs_get_article for direct retrieval. It also gives examples of common queries with recommended filters, effectively teaching the agent how to choose parameters.
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 tool update
v5.10.6- Changed
jamf_docs_list_products8 fields changed- changed
Input schema / properties / maxTokens / defaultPrevious value: -5000New value: +10000 - changed
Input schema / properties / maxTokens / descriptionPrevious value: -"Maximum tokens in response (100-50000, default: 5000)"New value: +"Maximum tokens in response (100-50000, default: 10000)" - added
Output schema / properties / publications / items / properties / app / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / publications / items / properties / app / typePrevious value: -"string"New value: +"array" - added
Output schema / properties / publications / items / properties / portal / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / publications / items / properties / portal / typePrevious value: -"string"New value: +"array" - added
Output schema / properties / publications / items / properties / utility / itemsAdded value: +{ + "type": "string" +} - changed
Output schema / properties / publications / items / properties / utility / typePrevious value: -"string"New value: +"array"
6 tool updates
v5.10.1- Changed
jamf_docs_batch_get_articles2 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH"New value: +"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN" - changed
Input schema / properties / language / enumPrevious value: -[ - "en-US", - "ja-JP", - "zh-TW", - "de-DE", - "es-ES", - "fr-FR", - "nl-NL", - "th-TH" -]New value: +[ + "en-US", + "ja-JP", + "zh-TW", + "de-DE", + "es-ES", + "fr-FR", + "nl-NL", + "th-TH", + "it-IT", + "pt-BR", + "zh-CN" +]
- Changed
jamf_docs_get_article2 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH"New value: +"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN" - changed
Input schema / properties / language / enumPrevious value: -[ - "en-US", - "ja-JP", - "zh-TW", - "de-DE", - "es-ES", - "fr-FR", - "nl-NL", - "th-TH" -]New value: +[ + "en-US", + "ja-JP", + "zh-TW", + "de-DE", + "es-ES", + "fr-FR", + "nl-NL", + "th-TH", + "it-IT", + "pt-BR", + "zh-CN" +]
- Changed
jamf_docs_get_toc11 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH"New value: +"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN" - changed
Input schema / properties / language / enumPrevious value: -[ - "en-US", - "ja-JP", - "zh-TW", - "de-DE", - "es-ES", - "fr-FR", - "nl-NL", - "th-TH" -]New value: +[ + "en-US", + "ja-JP", + "zh-TW", + "de-DE", + "es-ES", + "fr-FR", + "nl-NL", + "th-TH", + "it-IT", + "pt-BR", + "zh-CN" +] - changed
Input schema / properties / product / descriptionPrevious value: -"Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog"New value: +"Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog, jamf-account, jamf-security-cloud, elevate, composer, jamf-parent, jamf-teacher, jamf-setup-reset, jamf-assessment, title-editor, jamf-infrastructure-manager, jamf-adcs-connector, jamf-pki-proxy, jamf-migrate, jamf-remote-assist, jamf-cloud-distribution-service, healthcare-listener" - changed
Input schema / properties / product / enumPrevious value: -[ - "jamf-pro", - "jamf-school", - "jamf-connect", - "jamf-protect", - "jamf-now", - "jamf-safe-internet", - "jamf-insights", - "jamf-rapididentity", - "jamf-trust", - "jamf-routines", - "self-service-plus", - "jamf-app-catalog" -]New value: +[ + "jamf-pro", + "jamf-school", + "jamf-connect", + "jamf-protect", + "jamf-now", + "jamf-safe-internet", + "jamf-insights", + "jamf-rapididentity", + "jamf-trust", + "jamf-routines", + "self-service-plus", + "jamf-app-catalog", + "jamf-account", + "jamf-security-cloud", + "elevate", + "composer", + "jamf-parent", + "jamf-teacher", + "jamf-setup-reset", + "jamf-assessment", + "title-editor", + "jamf-infrastructure-manager", + "jamf-adcs-connector", + "jamf-pki-proxy", + "jamf-migrate", + "jamf-remote-assist", + "jamf-cloud-distribution-service", + "healthcare-listener" +] - added
Input schema / properties / publicationAdded value: +{ + "description": "Bundle family id for any Jamf publication, e.g. \"technical-paper-laps\" or \"jamf-pro-release-notes\". Use this for the documents that are not one of the products in `product` — release notes, technical papers, courses, evaluation and configuration guides. Exactly one of `product` or `publication` is required. Call jamf_docs_list_products to see the available ids.", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / version / descriptionPrevious value: -"Specific version (defaults to latest)"New value: +"Specific version (e.g. \"11.13.0\"); defaults to latest" - added
Input schema / properties / version / patternAdded value: +"^(?:current|\\d+(?:\\.\\d+)*)$" - removed
Input schema / requiredRemoved value: -[ - "product" -] - added
Output schema / properties / localeNoteAdded value: +{ + "type": "string" +} - added
Output schema / properties / publicationIdAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "product", - "productId", - "version", - "totalEntries", - "page", - "totalPages", - "hasMore", - "entries" -]New value: +[ + "product", + "version", + "totalEntries", + "page", + "totalPages", + "hasMore", + "entries" +]
- Changed
jamf_docs_glossary_lookup4 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH"New value: +"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN" - changed
Input schema / properties / language / enumPrevious value: -[ - "en-US", - "ja-JP", - "zh-TW", - "de-DE", - "es-ES", - "fr-FR", - "nl-NL", - "th-TH" -]New value: +[ + "en-US", + "ja-JP", + "zh-TW", + "de-DE", + "es-ES", + "fr-FR", + "nl-NL", + "th-TH", + "it-IT", + "pt-BR", + "zh-CN" +] - changed
Input schema / properties / product / descriptionPrevious value: -"Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog"New value: +"Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog, jamf-account, jamf-security-cloud, elevate, composer, jamf-parent, jamf-teacher, jamf-setup-reset, jamf-assessment, title-editor, jamf-infrastructure-manager, jamf-adcs-connector, jamf-pki-proxy, jamf-migrate, jamf-remote-assist, jamf-cloud-distribution-service, healthcare-listener" - changed
Input schema / properties / product / enumPrevious value: -[ - "jamf-pro", - "jamf-school", - "jamf-connect", - "jamf-protect", - "jamf-now", - "jamf-safe-internet", - "jamf-insights", - "jamf-rapididentity", - "jamf-trust", - "jamf-routines", - "self-service-plus", - "jamf-app-catalog" -]New value: +[ + "jamf-pro", + "jamf-school", + "jamf-connect", + "jamf-protect", + "jamf-now", + "jamf-safe-internet", + "jamf-insights", + "jamf-rapididentity", + "jamf-trust", + "jamf-routines", + "self-service-plus", + "jamf-app-catalog", + "jamf-account", + "jamf-security-cloud", + "elevate", + "composer", + "jamf-parent", + "jamf-teacher", + "jamf-setup-reset", + "jamf-assessment", + "title-editor", + "jamf-infrastructure-manager", + "jamf-adcs-connector", + "jamf-pki-proxy", + "jamf-migrate", + "jamf-remote-assist", + "jamf-cloud-distribution-service", + "healthcare-listener" +]
- Changed
jamf_docs_list_products1 field changed- added
Output schema / properties / publicationsAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "app": { + "type": "string" + }, + "id": { + "type": "string" + }, + "locales": { + "items": { + "type": "string" + }, + "type": "array" + }, + "portal": { + "type": "string" + }, + "title": { + "type": "string" + }, + "utility": { + "type": "string" + }, + "versions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id", + "title", + "locales", + "versions" + ], + "type": "object" + }, + "type": "array" +}
- Changed
jamf_docs_search8 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH"New value: +"Documentation language/locale (default: en-US). Options: en-US, ja-JP, zh-TW, de-DE, es-ES, fr-FR, nl-NL, th-TH, it-IT, pt-BR, zh-CN" - changed
Input schema / properties / language / enumPrevious value: -[ - "en-US", - "ja-JP", - "zh-TW", - "de-DE", - "es-ES", - "fr-FR", - "nl-NL", - "th-TH" -]New value: +[ + "en-US", + "ja-JP", + "zh-TW", + "de-DE", + "es-ES", + "fr-FR", + "nl-NL", + "th-TH", + "it-IT", + "pt-BR", + "zh-CN" +] - changed
Input schema / properties / product / descriptionPrevious value: -"Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog"New value: +"Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog, jamf-account, jamf-security-cloud, elevate, composer, jamf-parent, jamf-teacher, jamf-setup-reset, jamf-assessment, title-editor, jamf-infrastructure-manager, jamf-adcs-connector, jamf-pki-proxy, jamf-migrate, jamf-remote-assist, jamf-cloud-distribution-service, healthcare-listener" - changed
Input schema / properties / product / enumPrevious value: -[ - "jamf-pro", - "jamf-school", - "jamf-connect", - "jamf-protect", - "jamf-now", - "jamf-safe-internet", - "jamf-insights", - "jamf-rapididentity", - "jamf-trust", - "jamf-routines", - "self-service-plus", - "jamf-app-catalog" -]New value: +[ + "jamf-pro", + "jamf-school", + "jamf-connect", + "jamf-protect", + "jamf-now", + "jamf-safe-internet", + "jamf-insights", + "jamf-rapididentity", + "jamf-trust", + "jamf-routines", + "self-service-plus", + "jamf-app-catalog", + "jamf-account", + "jamf-security-cloud", + "elevate", + "composer", + "jamf-parent", + "jamf-teacher", + "jamf-setup-reset", + "jamf-assessment", + "title-editor", + "jamf-infrastructure-manager", + "jamf-adcs-connector", + "jamf-pki-proxy", + "jamf-migrate", + "jamf-remote-assist", + "jamf-cloud-distribution-service", + "healthcare-listener" +] - changed
Input schema / properties / version / descriptionPrevious value: -"Filter by version (e.g., \"11.5.0\", \"10.x\")"New value: +"Filter by version (e.g., \"11.13.0\") or \"current\"" - added
Input schema / properties / version / patternAdded value: +"^(?:current|\\d+(?:\\.\\d+)*)$" - added
Output schema / properties / otherSourcesAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "source": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "title", + "url", + "source" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / results / items / properties / otherVersionsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
2 tool updates
v4.3.1- Changed
jamf_docs_get_article3 fields changed- added
Output schema / properties / contentLocaleAdded value: +{ + "type": "string" +} - added
Output schema / properties / navigationAdded value: +{ + "additionalProperties": false, + "properties": { + "childCount": { + "type": "number" + }, + "children": { + "items": { + "additionalProperties": false, + "properties": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "title", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "parent": { + "additionalProperties": false, + "properties": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "title", + "url" + ], + "type": "object" + }, + "self": { + "additionalProperties": false, + "properties": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "title", + "url" + ], + "type": "object" + }, + "siblingCount": { + "type": "number" + }, + "siblings": { + "items": { + "additionalProperties": false, + "properties": { + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "title", + "url" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "self", + "siblings", + "children", + "siblingCount", + "childCount" + ], + "type": "object" +} - added
Output schema / properties / versionStatusAdded value: +{ + "enum": [ + "latest", + "superseded" + ], + "type": "string" +}
- Changed
jamf_docs_get_toc2 fields changed- added
Output schema / properties / entries / items / properties / depthAdded value: +{ + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Output schema / properties / entries / items / requiredPrevious value: -[ - "title", - "url" -]New value: +[ + "title", + "url", + "depth" +]
6 tool updates
v4.0.6- Changed
jamf_docs_batch_get_articles2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jamf_docs_get_article5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / contentId / patternPrevious value: -"^[a-zA-Z0-9_~\\-]+$"New value: +"^[a-zA-Z0-9_~-]+$" - changed
Input schema / properties / mapId / patternPrevious value: -"^[a-zA-Z0-9_~\\-]+$"New value: +"^[a-zA-Z0-9_~-]+$" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / tokenCountAdded value: +{ + "type": "number" +}
- Changed
jamf_docs_get_toc8 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / product / descriptionPrevious value: -"Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect"New value: +"Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / mapIdAdded value: +{ + "type": "string" +} - added
Output schema / properties / paginationNoteAdded value: +{ + "type": "string" +} - added
Output schema / properties / productIdAdded value: +{ + "type": "string" +} - added
Output schema / properties / versionNoteAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "product", - "version", - "totalEntries", - "page", - "totalPages", - "hasMore", - "entries" -]New value: +[ + "product", + "productId", + "version", + "totalEntries", + "page", + "totalPages", + "hasMore", + "entries" +]
- Changed
jamf_docs_glossary_lookup3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / product / descriptionPrevious value: -"Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect"New value: +"Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jamf_docs_list_products2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
jamf_docs_search6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / product / descriptionPrevious value: -"Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect"New value: +"Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect, jamf-now, jamf-safe-internet, jamf-insights, jamf-rapididentity, jamf-trust, jamf-routines, self-service-plus, jamf-app-catalog" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / filtersAdded value: +{ + "additionalProperties": false, + "properties": { + "docType": { + "type": "string" + }, + "language": { + "type": "string" + }, + "product": { + "type": "string" + }, + "topic": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / limitAdded value: +{ + "type": "number" +} - added
Output schema / properties / paginationNoteAdded value: +{ + "type": "string" +}
5 tool updates
v3.0.34- Added
jamf_docs_get_article - Added
jamf_docs_get_toc - Added
jamf_docs_glossary_lookup - Added
jamf_docs_list_products - Added
jamf_docs_search
5 tool updates
v3.0.30- Removed
jamf_docs_get_article - Removed
jamf_docs_get_toc - Removed
jamf_docs_glossary_lookup - Removed
jamf_docs_list_products - Removed
jamf_docs_search
6 tool updates
v3.0.25- First observed
jamf_docs_batch_get_articles - First observed
jamf_docs_get_article - First observed
jamf_docs_get_toc - First observed
jamf_docs_glossary_lookup - First observed
jamf_docs_list_products - First observed
jamf_docs_search
TDQS
Scored across 6 tools
Each tool serves a clearly distinct purpose: single article retrieval, batch retrieval, search, TOC browsing, glossary lookup, and product/listing. The only potential overlap is get_article vs batch_get_articles, but their single-vs-multiple distinction is explicit and unambiguous.
All tools share the jamf_docs_ prefix)Skip prefix. Most follow a verb_noun form (get_article, list_products, get_toc, batch_get_articles), but glossary_lookup inverts the order and search is a bare verb, introducing minor inconsistency.
Six tools is a well-scoped size for a documentation browsing server. Each tool adds clear value and there is no redundancy or bloat.
The tool surface covers the full documentation workflow: discover products/publications, browse the TOC, search for articles, fetch single or multiple articles, and look up glossary terms. No obvious gaps for the stated purpose of accessing Jamf docs.
Maintenance
Related MCP Connectors
Search and query nTop's knowledge base and engineering guides from AI applications.
The documentation, as a tool your agent can call: 950+ AI-dev guides. Search + fetch tools.
Versioned documentation registry and semantic search for AI tools and coding assistants.
Provides tools for searching Google Workspace documentation and much more.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search and fetch documentation content from Adobe Experience League, allowing natural language queries to retrieve Adobe product documentation and articles.-
- AlicenseBqualityFmaintenanceProvides AI assistants with access to Apple's Human Interface Guidelines and technical API documentation across all Apple platforms (iOS, macOS, watchOS, tvOS, visionOS), enabling unified search of design principles and implementation details.381 npm21MIT
- AlicenseAqualityDmaintenanceProvides access to Apple's official developer documentation, frameworks, APIs, and WWDC session transcripts across all Apple platforms. It enables AI assistants to search technical guides, sample code, and platform compatibility information using natural language queries.18565 npm1,378MIT
- AlicenseAqualityDmaintenanceEnables AI agents to search and retrieve jam-nodes documentation, including node info, API references, and guides, via MCP tools without loading everything into context.51MIT