Hookmark MCP Server
Allows linking local files and research notes directly to GitHub issues and repositories using stable Hookmark URLs.
Enables connecting project documents and development files to specific Jira tickets for better task context.
Provides full access to Hookmark's linking capabilities on macOS, allowing bidirectional connections between files, emails, and desktop applications.
Supports outputting lists of connected items and search results in Markdown format for easy documentation and sharing.
Enables capturing hooks from active Obsidian notes and connecting them to other local or web resources.
Allows for capturing and linking web URLs directly from the active Safari browser window to other documents or files.
Facilitates linking source code and technical notes to relevant Stack Overflow answers for quick reference.
Supports workflows where stable Hookmark links are added to Todoist tasks to provide instant cross-device access to related materials.
Enables linking active Xcode documents and projects to related design docs, requirements, or research.
Click on "Install 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., "@Hookmark MCP ServerLink the PDF on my desktop to this meeting note"
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.
links: "[[Ideaverse/AI/Hook/Hook|Hook]]"
hookmark-mcp
MCP server that gives Claude Code (and other MCP clients) full access to Hookmark — the macOS app that creates bidirectional links between files, URLs, emails, notes, and anything else with an address.
Link a PDF to an email. Connect a note to a webpage. Find everything related to a project. All through natural language.
Related MCP server: Anybox MCP Server
How It Works
Claude Code ──MCP──▶ hookmark-mcp ──shell──▶ hook CLI ──▶ Hookmark.app
(this server) (v2.1.3) (macOS)The server wraps Hookmark's hook CLI as seven MCP tools. Claude calls them like any other tool — you just talk normally:
"Link my TODO to that PDF on the desktop"
"What's connected to this file?"
"Search hookmark for everything about invoices"
"Hook whatever's open in Mail to this project"
You never need to remember tool names or parameters.
Quick Start
Prerequisites:
macOS with Hookmark installed
Hookmark's
hookCLI (gem install hookmarkor installed with Hookmark)Node.js 18+ or Bun
Install with Claude Code:
Tell Claude:
"Install the hookmark MCP server from github.com/mnott/Hook"
Claude will clone the repo, build it, and add it to your MCP config.
Manual install:
Add to your Claude Code MCP config (~/.claude.json):
{
"mcpServers": {
"hookmark": {
"command": "npx",
"args": ["-y", "hookmark-mcp"]
}
}
}Or with Bun:
{
"mcpServers": {
"hookmark": {
"command": "bunx",
"args": ["hookmark-mcp"]
}
}
}Restart Claude Code. The tools are ready.
From source (development):
git clone https://github.com/mnott/Hook.git
cd Hook
bun install
bun run buildThen point your MCP config to the local build:
{
"mcpServers": {
"hookmark": {
"command": "node",
"args": ["/path/to/Hook/dist/index.js"]
}
}
}Tools at a Glance
Tool | What it does | Example |
| Get a | "Get me a hook URL for this file" |
| Link two items bidirectionally | "Link this note to that PDF" |
| Show everything linked to an item | "What's linked to this file?" |
| Search all bookmarks by keyword | "Find all bookmarks about 'project X'" |
| Unlink two items | "Remove the link between these two files" |
| Copy all links from one item to another | "This file replaced that one — copy its links" |
| Grab a hook URL from whatever's open in an app | "Get me a hook for whatever's open in Mail" |
User Guide
You never need to remember tool names or parameters — just describe what you want in plain English. Here are the things you can do, organized by what you're trying to accomplish.
Connecting Things
The core of Hookmark is bidirectional links. When you connect two items, each one knows about the other.
"Link my TODO.md to the project requirements PDF on the desktop"
"Connect this source file to the GitHub issue at https://github.com/org/repo/issues/42"
"Hook the meeting notes to the presentation slides"
"Link every .ts file in src/ to the architecture document"
You can link files to files, files to URLs, URLs to URLs — anything with an address.
Finding Connections
Once things are linked, you can explore the web of connections from any starting point.
"What's hooked to this file?"
"Show me everything connected to the project plan"
"List all hooks for src/index.ts in verbose format"
"What files are linked to https://github.com/mnott/Hook?"
"Show me all my Hookmark bookmarks"
Omit the item to list everything. Ask for different output formats — paths, markdown links, hook:// URLs, or verbose details with titles and addresses.
Searching
Search across all your Hookmark bookmarks by keyword — it searches both names and URLs.
"Search hookmark for 'invoice'"
"Find all bookmarks related to the quarterly report"
"Search hookmark for anything mentioning 'API design'"
"Search just bookmark names for 'meeting' — don't search URLs"
"Search hookmark for 'budget' but only show files, no emails"
Working with Apps
Hookmark can reach into the frontmost window of any macOS app and grab a reference to whatever's active — the open document, email, note, task, or webpage.
"Get me a hook for whatever's open in Mail"
"Hook the current Obsidian note to this project"
"Link whatever's open in Finder to my TODO"
"Grab a hook URL from Safari and connect it to the design doc"
Supported apps include Finder, Mail, Safari, Obsidian, Bear, DEVONthink, Xcode, and any app that Hookmark supports (most document-based macOS apps).
Moving and Reorganizing Files
When you move or rename a file, its hooks don't follow automatically. Clone them to the new location.
"I moved report.md to the archive — clone its hooks to the new path"
"Copy all links from the old config to the new config file"
"This file replaced the other one — transfer its hooks"
The original keeps its links. The destination gets copies of all the same connections.
Cleaning Up
Remove links you no longer need.
"Unlink the budget spreadsheet from the old project plan"
"Remove the hook between these two files"
"Disconnect the meeting notes from the wrong project"
Real-World Workflows
Research and reference management
"Link this paper PDF to the notes I'm writing about it" "What sources are connected to my literature review?" "Hook this Stack Overflow answer to the bug fix commit"
Project organization
"Connect every file in this project to the project brief" "What's linked to the project requirements? Show me the full list." "Link the Jira ticket URL to the implementation file"
Email and communication
"Hook whatever's open in Mail to this contract PDF" "Search hookmark for that email about the deadline" "Link the client's email to the proposal document"
Code and documentation
"Link the API spec to the implementation in src/api/routes.ts" "What documentation is connected to this module?" "Hook the test file to the source file it tests"
Knowledge management
"Connect this Obsidian note to the original article URL" "What notes are linked to this topic?" "Link the DEVONthink document to my project TODO"
Combining MCP Servers
Hookmark becomes especially powerful when combined with other MCP servers. Here's a workflow that bridges email, document management, and task tracking across devices.
Email → DEVONthink → Hookmark → Todoist
You archive important emails in DEVONthink. DEVONthink items have stable URLs (x-devonthink-item://...) that work in DEVONthink To Go on iOS/iPadOS too. By creating a Hookmark link to a DEVONthink document and adding it to a Todoist task, you get a clickable reference from your task list straight to the email — on any device.
"Search DEVONthink for the email from the lawyer about the contract" "Get a hook URL for that DEVONthink document" "Create a Todoist task 'Review lawyer contract' with that link in the description"
Or in one shot:
"Find the email from Müller about the invoice in DEVONthink, get a hookmark link, and create a Todoist task to follow up on it by Friday"
This works because:
DEVONthink MCP finds the archived email
Hookmark MCP creates a stable
hook://URL that resolves to the DEVONthink itemTodoist MCP creates the task with the link in the description
On your iPhone, tapping the link in Todoist opens DEVONthink To Go and jumps straight to the email
The same pattern works with any combination — link Obsidian notes to Todoist tasks, connect GitHub issues to DEVONthink research, hook Calendar events to project files.
MCP Tool Reference
hookmark_link
Get the stable hook:// URL for a file or web URL.
Parameter | Required | Description |
| yes | Absolute file path or URL |
hookmark_connect
Create a bidirectional link between two items.
Parameter | Required | Description |
| yes | File path, URL, or |
| yes | File path, URL, or |
hookmark_list
List all items hooked to a given item. Omit item to list all bookmarks.
Parameter | Required | Default | Description |
| no | — | File path, URL, or |
| no |
|
|
| no |
| Exclude non-file items (emails, etc.) |
hookmark_search
Search bookmarks by keyword.
Parameter | Required | Default | Description |
| yes | — | Search term |
| no |
|
|
| no |
| Search only bookmark names, not URLs |
| no |
| Exclude non-file items |
hookmark_remove
Remove the bidirectional link between two items.
Parameter | Required | Description |
| yes | File path, URL, or |
| yes | File path, URL, or |
hookmark_clone
Copy all hooks from source to destination. Source is not modified.
Parameter | Required | Description |
| yes | Item to copy hooks from |
| yes | Item to copy hooks onto |
hookmark_frontmost
Get the hook:// URL for the active document in a macOS app.
Parameter | Required | Default | Description |
| yes | — | App name without |
| no |
| Return as a Markdown link |
Configuration
Variable | Default | Description |
|
| Path to the |
Override the CLI path if your hook binary is installed elsewhere:
{
"mcpServers": {
"hookmark": {
"command": "npx",
"args": ["-y", "hookmark-mcp"],
"env": {
"HOOK_CLI": "/usr/local/bin/hook"
}
}
}
}Item References
Hookmark items can be referenced in three ways:
Absolute file path:
/Users/you/Documents/report.pdfURL:
https://example.com/pageHook URL:
hook://file/5g29VkHoQ?p=...&n=index%2Ets
Hook URLs are stable identifiers — they survive file renames and moves (as long as Hookmark is tracking the file).
Troubleshooting
"hook: command not found"
The hook CLI isn't in the expected path. Install it with gem install hookmark or set HOOK_CLI to point to your binary. Find it with which hook or gem which hookmark.
"Hookmark is not running"
The hook CLI requires Hookmark.app to be running. Open it from Applications.
Tool calls return empty results
Hookmark only knows about items it has bookmarked. Open a file in Hookmark first (or use hookmark_link to create a bookmark), then hooks can be created.
"Permission denied" errors Claude Code needs accessibility permissions to interact with Hookmark via AppleScript. Check System Settings > Privacy & Security > Accessibility.
Requirements
macOS (Hookmark is macOS-only)
Hookmark with an active license
hookCLI v2.0+ (gem install hookmark)Node.js 18+ or Bun
License
MIT
Author
Matthias Nott — github.com/mnott
Links: [[Ideaverse/AI/Hook/Hook|Hook]]
Available Tools
7 toolshookmark_cloneA
Clone all hooks from one item onto another. Every item hooked to the source will also become hooked to the destination. The source item's hooks are not modified — this is a copy operation. Useful when duplicating a file or moving content to a new location.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Source item: absolute file path, URL, or hook:// URL to clone hooks from | |
| destination | Yes | Destination item: absolute file path, URL, or hook:// URL to clone hooks onto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by explicitly stating this is a copy operation that doesn't modify the source item's hooks, which clarifies important behavioral traits. However, it doesn't mention potential side effects, error conditions, or what happens if hooks already exist on the destination, leaving some gaps.
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 efficiently structured with three sentences that each add value: the core operation, clarification about source preservation, and usage context. There's no wasted text, and the most important information (what the tool does) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, 100% schema coverage, and no output schema, the description provides good context about the operation's purpose and behavior. However, as a mutation tool with no annotations, it could benefit from more detail about potential side effects or error conditions to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents both parameters thoroughly. The description doesn't add meaningful parameter semantics beyond what's in the schema - it mentions 'source' and 'destination' but doesn't provide additional context about format constraints or usage patterns. This meets the baseline for high schema coverage.
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 specific action ('Clone all hooks'), identifies the resources involved ('from one item onto another'), and distinguishes this from sibling tools by specifying it's a copy operation that doesn't modify the source. It goes beyond just restating the name by explaining what cloning hooks means in practice.
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 clear context about when to use this tool ('Useful when duplicating a file or moving content to a new location'), which helps the agent understand appropriate scenarios. However, it doesn't explicitly contrast with specific sibling tools or provide 'when-not-to-use' guidance, keeping it at a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hookmark_connectA
Create a bidirectional hook (link) between two items. Both items must be referenced by their file path, URL, or hook:// URL. After this call, each item will appear in the other's hook list. Use hookmark_link or hookmark_frontmost to obtain hook:// URLs first.
| Name | Required | Description | Default |
|---|---|---|---|
| item_a | Yes | First item: absolute file path, URL, or hook:// URL | |
| item_b | Yes | Second item: absolute file path, URL, or hook:// URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the bidirectional nature and outcome of the operation, but lacks details on permissions, error conditions, rate limits, or whether the operation is idempotent. It adequately describes the core behavior but misses advanced operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: first states purpose and input requirements, second explains outcome, third provides prerequisite guidance. Each sentence adds essential information, and the description is appropriately front-loaded with the core action.
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 moderate complexity (bidirectional linking), no annotations, and no output schema, the description is mostly complete. It covers purpose, usage, and prerequisites well, but lacks details on return values, error handling, or edge cases, which would be helpful for full contextual understanding.
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%, so the schema fully documents both parameters. The description adds marginal value by clarifying that items must be referenced by 'file path, URL, or hook:// URL' and mentioning sibling tools for obtaining hook:// URLs, but doesn't provide additional syntax or format details beyond what the schema already states.
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 specific action ('Create a bidirectional hook'), the resource ('between two items'), and distinguishes from siblings by mentioning alternative tools (hookmark_link, hookmark_frontmost) for obtaining required inputs. It goes beyond a tautology by explaining the bidirectional relationship and outcome.
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 when to use this tool ('After this call, each item will appear in the other's hook list') and provides clear alternatives for prerequisite steps ('Use hookmark_link or hookmark_frontmost to obtain hook:// URLs first'). It distinguishes from siblings by specifying the unique linking function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hookmark_frontmostA
Get the hook:// URL for the active document or window in the frontmost macOS application. Brings the specified application to the foreground and creates a Hookmark bookmark for whatever is currently active in that app (document, email, note, task, etc.). Returns the hook:// URL that can be used with hookmark_connect to link it to other items. Specify the app name without the '.app' suffix, e.g. 'Finder', 'Mail', 'Obsidian', 'Bear'.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | Application name without '.app' suffix (e.g. 'Finder', 'Mail', 'Obsidian', 'Bear', 'Xcode') | |
| markdown | No | When true, return the result as a Markdown link instead of a bare hook:// URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes key behaviors: bringing the app to the foreground, creating a bookmark, and returning a URL. However, it lacks details on error handling, permissions needed, or what happens if the app is not running or has no active document.
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 front-loaded with the core purpose, followed by specific instructions and examples. Every sentence adds value: the first states the action, the second explains the return value usage, and the third clarifies parameter formatting. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, no output schema), the description is fairly complete. It covers the purpose, usage, and parameter semantics adequately. However, it could improve by addressing potential errors or edge cases, such as what happens if the app is not installed or has no frontmost document.
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%, so the schema already documents both parameters thoroughly. The description adds minimal value beyond the schema, mentioning the app name format and the markdown option's purpose, but does not provide additional syntax or usage details for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get', 'Brings', 'creates') and resources ('hook:// URL', 'active document or window', 'Hookmark bookmark'). It distinguishes from siblings by focusing on creating a bookmark for the frontmost application rather than cloning, connecting, listing, removing, or searching existing bookmarks.
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 clear context on when to use this tool: to get a hook:// URL for the active item in a specified macOS app, which can then be used with hookmark_connect. It mentions the app name format requirement but does not explicitly state when not to use it or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hookmark_linkA
Generate a hook:// URL for a file or web URL and copy it to the clipboard. Returns the hook:// URL that Hookmark assigned to the item. Use this URL as a stable reference to the item when calling hookmark_connect. Accepts an absolute file path (e.g. '/Users/you/note.md') or any URL (e.g. 'https://example.com').
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | Absolute file path or URL to get a Hookmark URL for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it generates a URL, copies it to the clipboard, returns the assigned URL, and accepts specific input types. It doesn't mention error conditions, rate limits, or permissions, but covers the core operation adequately.
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?
Three sentences with zero waste: first states the core action, second explains the return value and connection to another tool, third clarifies input acceptance. Each sentence earns its place with essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no annotations and no output schema, the description is quite complete: explains what the tool does, when to use it, what it returns, and what inputs it accepts. The main gap is lack of error handling or edge case information, but it's sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single parameter. The description adds value by providing concrete examples ('/Users/you/note.md', 'https://example.com') and clarifying it accepts 'any URL', but doesn't add significant semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Generate', 'copy') and resources ('hook:// URL for a file or web URL'). It distinguishes from siblings by focusing on URL generation rather than connection, listing, searching, or removal operations.
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?
Explicit guidance is provided on when to use this tool: 'Use this URL as a stable reference to the item when calling hookmark_connect.' This clearly distinguishes it from the sibling tool hookmark_connect and provides a specific use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hookmark_listA
List all items hooked to a given file or URL. Returns one item per line in the requested format. Use format 'paths' (default) for plain paths/URLs, 'markdown' for clickable links, 'hooks' for hook:// URLs only, or 'verbose' for full details. Accepts an absolute file path, URL, or hook:// URL. Call with no item to list all Hookmark bookmarks.
| Name | Required | Description | Default |
|---|---|---|---|
| item | No | Absolute file path, URL, or hook:// URL to list hooks for. Omit to list all bookmarks. | |
| format | No | Output format: 'paths' (default), 'hooks' (hook:// URLs), 'markdown' (links), or 'verbose' (full details) | paths |
| files_only | No | When true, exclude non-file items such as emails |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: the tool returns one item per line in specified formats, accepts various input types (file path, URL, hook:// URL), and can list all bookmarks if no item is provided. However, it lacks details on error handling, rate limits, or authentication needs, which are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by format details and usage notes. Every sentence adds value without redundancy, making it efficient and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is fairly complete for a read-only list tool. It covers input types, format options, and a special case (no item). However, it could improve by mentioning potential outputs or error scenarios, but the lack of output schema is compensated by format explanations.
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%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema, such as clarifying that omitting 'item' lists all bookmarks and briefly explaining format options, but does not provide significant additional semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('items hooked to a given file or URL'), specifying it returns one item per line. It distinguishes from siblings by focusing on listing hooks rather than cloning, connecting, linking, removing, or searching, which are different operations.
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?
It explicitly states when to use this tool ('List all items hooked to a given file or URL') and provides alternatives for different formats. It also clarifies usage without an item to list all bookmarks, offering clear context for when to omit parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hookmark_removeA
Remove a bidirectional hook between two items. Both items must be referenced by their file path, URL, or hook:// URL. This removes the link from both directions — after this call neither item will appear in the other's hook list.
| Name | Required | Description | Default |
|---|---|---|---|
| item_a | Yes | First item: absolute file path, URL, or hook:// URL | |
| item_b | Yes | Second item: absolute file path, URL, or hook:// URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the mutation behavior ('removes the link from both directions') and the outcome ('after this call neither item will appear in the other's hook list'), which is crucial for a destructive operation. It doesn't mention error conditions or permissions, but provides solid behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences that each earn their place: the first states the purpose and requirements, the second explains the bidirectional effect. There's no wasted text, and key information is front-loaded appropriately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description does well by explaining the action, requirements, and bidirectional effect. However, it lacks information about return values, error conditions, or confirmation messages, which would be helpful given the destructive nature. It's mostly complete but has minor 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?
The input schema has 100% description coverage, clearly documenting both parameters as file paths, URLs, or hook:// URLs. The description adds minimal value beyond the schema by reinforcing that 'both items must be referenced by their file path, URL, or hook:// URL,' which is already covered in the schema descriptions. This meets the baseline for high schema coverage.
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 specific action ('Remove a bidirectional hook between two items') and the resource involved ('bidirectional hook'), distinguishing it from sibling tools like hookmark_connect (create) or hookmark_list (read). It provides precise information about what the tool does beyond just the name.
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 clear context for when to use this tool ('Remove a bidirectional hook between two items') and specifies that both items must be referenced by file path, URL, or hook:// URL. However, it doesn't explicitly mention when NOT to use it or name alternatives among siblings like hookmark_unlink or hookmark_disconnect if they existed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hookmark_searchA
Search Hookmark bookmarks by keyword. Searches both bookmark names and URLs by default. Returns matching items, one per line. Use format 'paths' (default), 'markdown', 'hooks', or 'verbose' to control output. Use names_only to restrict the search to bookmark names only.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search term to look for in bookmark names and URLs | |
| format | No | Output format: 'paths', 'hooks', 'markdown' (default), or 'verbose' | markdown |
| names_only | No | When true, search only bookmark names, not URLs | |
| files_only | No | When true, exclude non-file items such as emails |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the search scope (names and URLs by default), output format options, and restrictions (names_only, files_only). However, it lacks details on rate limits, error handling, or authentication needs, leaving some gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by specific usage details in a logical flow. Each sentence adds essential information without redundancy, making it highly efficient and well-structured for quick understanding.
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 moderate complexity (4 parameters, no output schema, no annotations), the description is mostly complete. It covers the search behavior, output formats, and key parameters, but could improve by mentioning potential limitations or example use cases. Without annotations or output schema, it adequately informs but has minor 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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema, mentioning 'format' options and 'names_only' briefly, but does not provide additional semantic context or examples. This meets the baseline for high schema coverage.
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 specific action ('Search Hookmark bookmarks by keyword'), resource ('Hookmark bookmarks'), and scope ('both bookmark names and URLs by default'), distinguishing it from siblings like hookmark_list or hookmark_remove. It explicitly defines the tool's function without being vague or tautological.
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 through its explanation of search behavior (e.g., 'by default' searches names and URLs, with options to restrict), but does not explicitly state when to use this tool versus alternatives like hookmark_list or hookmark_search. It provides some context but lacks direct guidance on tool selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
hookmark_clone - First observed
hookmark_connect - First observed
hookmark_frontmost - First observed
hookmark_link - First observed
hookmark_list - First observed
hookmark_remove - First observed
hookmark_search
TDQS
Each tool has a clearly distinct purpose with no overlap: clone copies hooks, connect creates links, frontmost gets active app URLs, link generates URLs, list shows hooked items, remove deletes links, and search finds bookmarks. The descriptions reinforce these unique functions, making misselection unlikely.
All tools follow a consistent 'hookmark_verb' pattern (e.g., hookmark_clone, hookmark_connect), using snake_case throughout. This predictability makes the tool set easy to navigate and understand at a glance.
With 7 tools, the server is well-scoped for managing Hookmark bookmarks and links. Each tool serves a specific, necessary function in the workflow—from creating and listing hooks to searching and removing them—without feeling bloated or sparse.
The tool set provides complete coverage for the Hookmark domain: it supports creating (connect, link, frontmost), reading (list, search), updating (clone), and deleting (remove) hooks, with no obvious gaps. Agents can perform all core operations without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Search, save, and set reminders in your personal MarkIt library of links, posts, and notes.
Streamline your Attio workflows using natural language to search, create, update, and organize com…
Connect AI to Stelllink to organize, access, manage and share files, links, and digital workspaces.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceConnect AI with any macOS app. Deep integration with native apps like Calendar, Mail, Notes, plus UI control for all applications. Works with Claude, Cursor, Raycast, and any MCP-compatible AI.40-
- FlicenseNot gradedqualityFmaintenanceEnables interaction with Anybox bookmark manager on macOS, allowing users to search, save, and organize bookmarks with tags and folders through natural language.14-
- AlicenseNot gradedqualityAmaintenanceProvides seamless integration with macOS native applications including Messages, Notes, Contacts, Mail, Reminders, Calendar, and Maps, enabling natural language control and automation of Apple ecosystem apps.17MIT
- FlicenseCqualityAmaintenanceConnect Claude, Cursor, Windsurf and other AI agents to macOS native apps — Mail, Calendar, Contacts, Reminders, Notes, iMessage, Finder, Safari, OmniFocus, Microsoft Teams, Outlook, OneDrive, Word, Excel, PowerPoint, and PDF. 82 tools. All data stays on your Mac.24649-
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/mnott/Hook'
If you have feedback or need assistance with the MCP directory API, please join our Discord server