PDF Content Search MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PDF_CS_HOST | No | Host to reach the app | 127.0.0.1 |
| PDF_CS_PORT | No | Port of the app's API server | 44477 |
| PDF_CS_TOKEN | Yes | Bearer token matching the app's API Server token (required) |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_documentsA | Full-text search across all indexed PDF documents. Returns matching documents with snippets and match counts. |
| get_document_textA | Get the full OCR text content of a document. Returns text organized by page. |
| get_document_metadataA | Get metadata for a document: file name, path, page count, file size, processing state, and folder reference. |
| list_foldersA | List all indexed document folders with their IDs and paths. |
| list_folder_contentsB | List documents in a specific folder with processing state. Supports pagination. |
| get_processing_statusA | Get OCR processing statistics: total documents, counts by state (completed, not_processed, processing, error, etc.), per-folder breakdown. |
| get_document_thumbnailA | Get a PNG thumbnail of a specific document page. Returns base64-encoded image data. |
| export_documentsB | Export OCR text and metadata for multiple documents at once. Useful for bulk text extraction. |
| get_app_statusA | Get application health status, version, uptime, and active port. |
| get_ui_stateA | Get current UI state: selected document, list item count, search/browse mode, focused field. |
| get_search_stateA | Get the currently animated OCR hit rects on the document preview. Returns the active search text, per-rect page index, matched text, and the four corner points in normalized page coordinates [0.0..1.0] (origin top-left). Use this to debug highlights drawn outside the page bounds. |
| ui_searchA | Trigger a search in the app UI. Sets the search text and initiates the search, returning the result count. |
| ui_navigateC | Navigate in the document list: move up/down, jump to first/last, or go to a specific index. |
| ui_select_documentB | Select a specific document by ID or index in the current list. |
| ui_screenshotA | Take a screenshot of the main application window. Returns base64-encoded PNG image. |
| open_in_finderA | Reveal a document in macOS Finder by document_id or file_path. Only works when the app runs on the same Mac as the MCP client. |
| open_document_externalA | Open a document (by document_id or file_path) with the default macOS application, e.g. Preview for PDFs. Only works when the app runs on the same Mac as the MCP client. |
| reprocess_documentA | Re-queue a document for OCR processing. Useful when OCR failed or the document was updated. |
| rescan_folderA | Rescan a folder (by folder_id) for new or changed files. Initiates an asynchronous folder scan. |
| get_license_statusA | Get current license status: state (active/trial/grace/inactive/blocked), entitlement kind, expiration, days left, provider source, last sync date, and any issues. |
| refresh_licenseB | Refresh license status by re-syncing with the license server. Use force=true to bypass cache. |
| get_settingsA | Get current app settings. Specify a category or omit for all settings. |
| get_mail_message_metadataA | Read header and mailbox metadata for an Apple Mail message by RFC message-id. Requires Apple Mail indexing to be enabled. |
| open_in_apple_mailA | Open Apple Mail and jump to the message with the given RFC message-id. Only works when MCP client and app run on the same Mac. |
| get_mail_index_statusB | Returns Apple Mail indexer status: enabled flag, is_indexing, indexed_count, last_seen_rowid, envelope_index_path/readable, MailFtsSqlite db path. |
| get_mail_recentA | Returns the most recently indexed mails from MailFtsSqlite with subject/sender/date/snippet preview. |
| get_mail_mailboxesA | Returns mailbox-rowid + URL pairs from the Apple Mail Envelope Index for account-filter setup. |
| setup_apple_mailB | Configure Apple Mail indexing programmatically: bookmark mail_root (default ~/Library/Mail), optionally clear the index, set OCR size limit and account filter, then enable. Avoids the onboarding sheet entirely. |
| disable_apple_mailA | Disable Apple Mail indexing and remove the sidebar item. Index is kept on disk. |
| clear_mail_indexA | Wipe MailFtsSqlite rows and reset the indexer cursor to 0. Next index run will re-read from scratch. |
| reindex_apple_mailB | Trigger an indexer run. Pass restart=true to stop the current task first. |
| get_mail_full_index_statusA | Counters across all mailFtsMeta rows: success, empty, failed, pending. Use to verify completeness of Apple Mail index. |
| list_incomplete_mailsA | List Apple Mail records that are not 'success' (empty/failed/pending) with externalId, attemptCount, errorReason, envelopeRowid. |
| retry_incomplete_mailsA | Reset attemptCount and indexStatus='pending' for all non-success records and trigger an indexer run. Pulls newly-arrived .emlx bodies in. |
| cleanup_stale_mail_metaC | GC stale records: 'empty' with attemptCount>=10 older than 30 days, 'failed' older than 90 days. |
| list_mail_cloud_jobsA | List Office-attachment Cloud-Jobs (mailCloudJobs). Returns per-job docPortJobId, status, attemptCount, attachment metadata. Use status filter for slice. |
| retry_failed_mail_cloud_jobsA | Reset all 'failed' Office-attachment Cloud-Jobs to 'pending' with attemptCount=0, then trigger an immediate worker-tick. |
| cancel_pending_mail_cloud_jobsA | Cancel all 'pending' Office-attachment Cloud-Jobs (set status='notSupported', reason='user cancelled'). |
| tick_mail_cloud_workerA | Trigger an immediate MailCloudWorker tick (process downloaded/pending/polling jobs now instead of waiting for the 30-second timer). |
| get_mail_detailA | Full detail of an indexed mail by external-id (RFC message-id): header fields, mailbox, attachment list and indexed body/attachment text. |
| get_mail_by_rowidB | Peek at an indexed mail by its MailFtsSqlite rowid. Returns subject/sender/date/snippet for that single row. |
| reveal_mail_in_finderA | Reveal the .emlx file of an indexed mail in Finder (falls back to opening it in Apple Mail). Only works on the same Mac as the app. |
| list_mail_attachmentsA | List attachments of an indexed mail: external files from the Apple Mail Attachments folder plus inline MIME parts. Returns name, size, content_type and kind (external/inline). |
| get_mail_attachmentA | Fetch a single attachment of an indexed mail by name. Returns base64 by default; for large attachments pass save_to_path to write the file to disk instead of returning base64. |
| get_document_ocr_rectsA | Get OCR bounding boxes for a document: per-rect page index, recognised text and x/y/width/height in normalized page coordinates. Optionally filter by page. |
| get_folder_statsA | Get aggregate stats for a folder: total documents, total pages and a breakdown by processing state. |
| get_folder_processing_statusA | Get the OCR processing status of a folder: whether it is currently processing plus counts for processing/pending/completed/failed. |
| get_processing_progressA | Get the live OCR processing progress: is_processing flag, total/processed item counts and progress percent. |
| list_recent_scansA | List recently scanned items with file name/path/type, creation date and read state. |
| get_unread_scan_countA | Get the number of recently scanned items not yet marked as read. |
| mark_scan_as_readB | Mark a recent scan item as read by its scan ID. |
| add_folderA | Add a folder to the indexed search folders by absolute path. The path must exist and be a directory. |
| delete_folderA | Remove a folder (by folder_id) from the index. Destructive. Requires confirm=true. |
| delete_documentA | Delete a single document (by document_id) from the index. Destructive. Requires confirm=true. |
| bulk_delete_documentsA | Delete multiple documents (document_ids) from the index at once. Destructive. Requires confirm=true. |
| patch_settings_searchB | Update search settings. Accepted fields: case_sensitive, fuzzy_search, whole_word, max_results, search_in_filenames, highlight_matches, auto_search, snippet_length, exclude_patterns, min_query_length. |
| patch_settings_processingB | Update OCR/processing settings. Accepted fields: ocr_enabled, ocr_language, auto_process_new, max_concurrent_tasks, process_images, process_pdfs, thumbnail_quality, ocr_quality, max_file_size_mb. |
| patch_settings_appearanceC | Update appearance settings. Accepted fields: theme, accent_color, sidebar_visible, list_density, show_thumbnails, font_size, grid_view. |
| patch_settings_sharingC | Update mobile-sharing settings. Accepted fields: enabled, require_approval, share_name, max_devices, auto_accept_known, read_only, sharee_key. |
| ui_list_itemsA | List the items currently shown in the app's document list. |
| ui_get_zoomA | Get the document preview zoom state: zoom_level, min/max zoom and fit_mode. |
| ui_set_zoomB | Set the document preview zoom. Pass zoom_level (a value between min and max) and/or fit_mode. |
| ui_get_pageA | Get the current page state of the document preview: current_page and total_pages. |
| ui_set_pageA | Navigate the document preview. Pass action (first/prev/next/last) or page (1-based page number). |
| ui_get_transcriptA | Get the transcript panel state: visible flag and mode. |
| ui_set_transcriptA | Set the transcript panel. Pass visible (bool) and/or mode (e.g. split / searchResults). |
| ui_get_sortA | Get the current list sort order plus the list of available sort orders. |
| ui_set_sortA | Set the list sort order. Pass sort with one of the values returned by ui_get_sort (e.g. relevance / new2Old / old2New / a2z / z2a). |
| ui_get_filtersA | Get the active list filters: file_types, date_range and folders. |
| ui_set_filtersA | Set list filters. Pass file_types (array), date_range (string) and/or clear=true to reset all filters first. |
| ui_get_popupsA | List the popups/sheets currently presented in the app UI. |
| ui_dismiss_popupB | Dismiss a presented popup/sheet in the app UI. |
| ui_list_alertsA | List the NSAlerts currently shown by the app: title, message, window and button titles. |
| ui_dismiss_alertA | Dismiss active app alerts. Pass button_title or button_index to click a specific button, or dismiss_all=true to close every open alert. |
| activate_licenseA | Activate a license using license_key. Sensitive. Requires confirm=true. |
| deactivate_licenseA | Deactivate the current license. Sensitive. Requires confirm=true. |
| request_trialA | Start a trial period. Sensitive. Requires confirm=true. |
| get_cloud_statusA | Get cloud-service status: enabled flag, conditions_accepted, number of scanned folders and item counts by state. |
| list_cloud_itemsA | List cloud-service items across all folders with file path, folder, state and modification date. Optionally filter by state. |
| cloud_syncA | Control the cloud service. Pass enabled to toggle it (requires accept_conditions=true once), or omit to run a cleanup of completed items. |
| get_mobile_sync_statusA | Get mobile-sync status: number of connected folders, HTTP folders and polling state. |
| list_mobile_devicesA | List folders shared with mobile devices including backend, client identifier and last sync timestamps. |
| mobile_syncB | Trigger a mobile sync. Pass folder_path to sync a single connected folder, or omit to sync all. |
| confirm_mobile_pairingA | Confirm a mobile-device pairing using the 9-digit code. Sensitive. Requires confirm=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/juergenkoller-software/pdf-content-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server