Jamf Docs MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
| extensions | {
"io.modelcontextprotocol/ui": {
"mimeTypes": [
"text/html;profile=mcp-app"
]
}
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| jamf_docs_list_productsA | List Jamf products, publications, topics, and documentation versions. Returns two separate catalogues:
Also lists available topic and docType filters for search. Args:
Returns: For JSON format: { "products": [...], "publications": [...], "topics": [...], "incomplete"?: { "unavailable": string[], "message": string }, "tokenInfo": { "tokenCount": number, "truncated": boolean, "maxTokens": number } } For Markdown format: A formatted list of products and topics with their details. Examples:
Note: This is a read-only operation that does not modify any state. If a source could not be read, the reply lists what it could and says so. "incomplete" then names each unavailable source, its "message" says what that cost, and the Markdown reply says the same at the top. "maps-registry" is the list of documentation maps, from learn.jamf.com or a configured maps provider, where the publication list and the product versions both come from: either can then be missing or a compiled-in default. "jamf-support" is support.jamf.com, whose jamf-support-* publications are then missing, or, when only some of its languages could not be read, leave those out of their "locales". The message says whether trying again may help. No "incomplete" means every source answered. |
| jamf_docs_searchA | 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:
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 }, // Set when a filter matched nothing and was removed, or could not be applied. "filterRelaxation"?: { "removed": [string], "original": { "": string }, "message": string }, // Set when a result is at a version other than the one asked for. "versionNote"?: string, // Set when no page has a phrase the query quotes in 「」, 『』, 「」 or « » as written: // the query was searched again with those marks read as no quotes, and "results" are // what that found. Also set, with no results, when that found nothing either. "queryNote"?: string, // Set when page was past the last page, and the last is shown instead, or when // limit and maxTokens make more pages than page accepts: it then says what // reaches the rest. "paginationNote"?: string, // How "results" are ordered, and by whom. Absent when "results" is empty. "relevanceNote"?: string, // Pages outside the product documentation, matched on title and ranked // separately from "results", which carry no score to rank them against. // Omitted when none matched. "otherSources"?: [{ "title": string, "url": string, "source": string }], // Queries to try instead, when "results" is empty. "suggestions"?: [string], // When "results" is empty and language is not en-US, as not all documentation is // in it, or the query has Chinese, Japanese, Korean or Thai words and the documentation in // language is not written in them: which documentation to search instead, and how. "localeNote"?: string, // Only on a page that is one result cut to fit; see the Note on paging. "truncatedResult"?: { "title": string, "estimatedTokens": number } } For Markdown format: A formatted list of search results with pagination and token info. Examples (common query → recommended filters):
Errors:
Note: "No results found" is not an error. It means the search ran and nothing in the product documentation matched; in JSON that is "total": 0, with "suggestions" and any "otherSources". Note: Results are ranked by relevance. Use filters and pagination to navigate large result sets. A page holds up to limit results, as many as fit maxTokens, and the next page starts at the first that did not fit. Every result is on exactly one page, but which page depends on limit and maxTokens, so keep both the same while paging; the markdown footer names them beside the next page when they are not the default, and structuredContent carries limit and maxTokens. A result larger than maxTokens on its own is alone on its page with its snippet cut to fit; only that page has tokenInfo.truncated, and truncatedResult.estimatedTokens is what the whole result costs. If limit and maxTokens make more pages than page accepts (100), page 100 offers no next page and paginationNote says what reaches the rest. 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, unless the result is external (see the next Note). Note: A result with "external": true is not a page of the documentation but one Jamf's search lists beside it, such as a course in the Jamf Training Catalog (trainingcatalog.jamf.com), at the rank the search gave it. jamf_docs_get_article cannot read it: open its url in a browser. It has no mapId + contentId pair. Jamf classifies a Training Catalog course as training content, so its docType is "training" and docType "training" returns it; any other docType, or a specific version, leaves it out. |
| jamf_docs_get_articleA | 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 learn.jamf.com, docs.jamf.com, concepts.jamf.com, support.jamf.com. Address the article either by Args:
Returns: For JSON format: { "title": string, "content": string, "url": string, "product": string, "version": string, "contentLocale": string, // the language content is in, where the article says "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:
Errors:
Note: |
| jamf_docs_get_tocA | 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 Args:
Returns: For JSON format: { "product": string, "version": string, "mapId": string, // absent for a concepts.jamf.com or support.jamf.com TOC, // and when a TOC provider names no map "toc": [...], // each entry: title, url, and contentId when from a map "tokenInfo": { "tokenCount": number, "truncated": boolean, "maxTokens": number }, "pagination": { "page": number, "pageSize": number, "totalPages": number, "totalItems": number, "hasNext": boolean, "hasPrev": boolean }, "truncatedEntry"?: { // only on a page cut to fit; see the Note "title": string, "shownEntries": number, "totalEntries": number, "estimatedTokens": number } } For Markdown format: A hierarchical list of documentation topics with pagination and token info. Examples:
Errors:
Note: Use this to discover what topics are available before searching or retrieving specific articles. Large TOCs are paginated by top-level entry: a page holds up to 10 of them, each with everything under it, as many as fit maxTokens, and the next page starts at the first that did not fit. Every top-level entry is on exactly one page, but which page depends on maxTokens, so keep maxTokens the same while paging; the markdown footer names it beside the next page when it is not the default. A top-level entry larger than maxTokens on its own is alone on its page, cut to the entries under it that fit; only that page has tokenInfo.truncated, and truncatedEntry.estimatedTokens is what the whole entry costs. If maxTokens makes more pages than page accepts (100), page 100 offers no next page and paginationNote names a maxTokens that reaches the rest. The response-level mapId and an entry's contentId together form the pair jamf_docs_get_article accepts for a direct fetch. Full markdown shows the mapId only, and compact markdown shows neither; use responseFormat="json" (or read structuredContent) for both. A concepts.jamf.com or support.jamf.com TOC has neither: it names no map, and its entries carry only title, url and children. Read any of its entries by url with jamf_docs_get_article; a support.jamf.com subcollection's url is its collection page, which reads as the list of its articles. structuredContent also carries what to send back for the next page: productId (or publicationId), version, language (when one was asked for) and maxTokens. The JSON text has no id or language, and has the budget as tokenInfo.maxTokens. 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. |
| jamf_docs_glossary_lookupA | Look up a term in the Jamf official glossary and get its definition. This tool searches the Jamf Platform Technical Glossary, one glossary shared by every Jamf product, and returns matching term definitions using fuzzy matching. A term of 4 characters or fewer is treated as an abbreviation and must be a whole word of the entry's name, so "DEP" does not match "zero-touch deployment". A 4-character term may be a plural, or miss a letter or swap two ("MDMs", "LDPA"). Note: Glossary content is currently only available in English (en-US). Non-English language parameters are accepted but results will be in English. A reply with no match says so when the term was asked in another language or written in a script other than Latin, such as Chinese. Args:
Returns: For JSON format: { "term": string, "totalMatches": number, "entries": [{ "term": string, "definition": string, "url": string }], "tokenInfo": { "tokenCount": number, "truncated": boolean, "maxTokens": number }, "truncatedContent"?: { "omittedCount": number, "omittedItems": [{ "title": string, "estimatedTokens": number }] }, "incomplete"?: { "unfetched": [{ "term": string, "url": string }], "message": string }, // Set when the English glossary answered a term asked in another language, // or found no match for one written in a script other than Latin. "warning"?: string } For Markdown format: A formatted list of glossary definitions with source links. Examples:
Errors:
Note: "No glossary entries found" is not an error. It means the glossary was read and no entry matches; in JSON that is "totalMatches": 0. If entries match but not even the first fits in maxTokens, the reply says how many matched and the maxTokens the first one needs: "truncatedContent" lists each entry left out and the tokens it costs. If some matching entries could not be fetched, the reply answers from the rest and says so: "incomplete" names the entries it may be missing. If the entry that would lead the answer is one of them, that is the error above instead. |
| jamf_docs_batch_get_articlesA | 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:
Returns: An array of article results. Each article independently succeeds or fails. For JSON format, returns a BatchResponse object with results, summary, and tokenInfo. A result carries contentLocale, the language its content is in, where the article says. Examples:
Note: Token budget is split evenly across articles. Use higher maxTokens for more articles.
A note on an article (such as one about |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| jamf_troubleshoot | Guide through troubleshooting a Jamf issue using official documentation |
| jamf_setup_guide | Generate a step-by-step setup guide for a Jamf feature using official documentation |
| jamf_compare_versions | Compare documentation between two versions of a Jamf product to identify changes |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| products | List of all available Jamf products with their IDs and latest versions. Data is fetched dynamically from the API. |
| topics | Topic categories for filtering documentation searches. Combines official TOC structure with curated categories. |
| jamf-docs-app | Interactive viewer for Jamf documentation search results, tables of contents, and articles. |
TDQS
Scored across 6 tools
Each tool occupies a distinct role in the docs workflow: catalogue listing, search, single fetch, batch fetch, TOC browsing, and glossary lookup. The only mild overlap is between jamf_docs_list_products (catalogue of products/publications/filters) and jamf_docs_get_toc (navigation structure), but the descriptions explicitly clarify that one is discovery metadata and the other is document hierarchy. jamf_docs_get_article vs jamf_docs_batch_get_articles is unambiguous given the batch's explicit concurrency/bulk framing.
All tools share a clear jamf_docs_ prefix and are snake_case, which is strong. Most follow verb_noun (list_products, get_article, get_toc), but glossary_lookup inverts to noun_verb and batch_get_articles inserts a modifier prefix, so it is not perfectly uniform.
Six tools is well-scoped for a documentation server: discovery, search, retrieval (single and bulk), structure browsing, and glossary each earn their place. No redundant or filler tools are present.
The doc lifecycle is well covered: discover products/publications, list versions via list_products or error hints, browse TOC, search, fetch single or batch articles, and look up glossary terms. Minor gaps include no dedicated version-listing or category-browsing operation, but agents can work around these via list_products and the TOC.