get_recent_postsLABSCO SUMMARY
Built around the fact that the token rides in the URL.
Pinboard's v1 API puts your token in a query parameter, which means any unhandled network error can spill it into a log file — this server truncates and sanitises those errors on purpose, and validates tags and hex IDs with Zod before any request goes out. Everything else follows from being stdio-only: no port, no third party, and a full read-write surface over your own bookmarks.
What it is
A local server on the Pinboard API v1, written in TypeScript with Zod schemas. It reads and writes bookmarks, manages tags, and reads notes, over stdio only — it never opens an HTTP port, and talks solely to api.pinboard.in.
What you get
get_recent_postslists your latest bookmarks, filtered by up to 3 tags,countdefaulting to 15 and capped at 100get_postsretrieves bookmarks by tag, by adtdate, or by exacturl, withmetafor the change-detection hashget_all_postsreturns everything, paged withstartandresultsand bounded byfromdt/todt— rate limited to once every 5 minutesadd_postadds or replaces a bookmark (url and title required, tags starting with.are private,sharedandtoreadcontrol visibility and reading state);delete_postremoves one permanently- Tags:
get_tagswith usage counts,suggest_tagsreturning popular and recommended tags for a URL,rename_tagto rename or fold one into another,delete_tagto drop a tag without touching the bookmarks - Notes:
list_notesfor the list,get_notefor one note's full body — note creation and editing are outside the v1 API get_last_updatereturns the time of the most recent change, so you can tell whether anything moved since your last fetch
Requirements
A Pinboard API token from Settings → Password on pinboard.in, in the form username:HEXTOKEN, passed as PINBOARD_API_TOKEN. Easiest path: download the .mcpb file from the repository's releases and drop it on your assistant. Otherwise Node.js 22 or newer, then npm install and npm run build, and point your client at node with the path to dist/index.js. The v1 API takes the token as a query parameter, so the server intercepts and sanitises network-level error messages to keep it out of your client's logs.
Setup effort
Build from source — git clone https://github.com/mattriffle/local-pinboard-mcp.git
USE CASES
Finding something you saved and can't name
Pull recent bookmarks or filter by the tags you would have used.
Saving a link mid-conversation
Add it with a description and tags, marked unread if you want to come back to it.
Tidying a tag vocabulary that has drifted
Read the tags with their counts, then fold the near-duplicates into one.
Reading a note you wrote earlier
List the notes and open the one you meant, body text included.
Syncing without refetching everything
Check the last-update time first and only pull if something changed.
12 tools
Listed in project docs. Your client may show a different list.
get_postsget_all_postsadd_postdelete_postsuggest_tagsget_tagsrename_tagdelete_taglist_notesget_noteget_last_updateBEFORE YOU INSTALL
What to know first
Tools you get
12 tools named in the project's documentation.
Requires
PINBOARD_API_TOKEN in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone and build this one yourself.
Server setup
git clone https://github.com/mattriffle/local-pinboard-mcp.git
cd local-pinboard-mcp
npm install
npm run buildMCP Clients
Claude Desktop
{
"mcpServers": {
"local-pinboard": {
"command": "node",
"args": [
"<YOUR_PATH_TO_LOCAL_PINBOARD_MCP>/dist/index.js"
],
"env": {
"PINBOARD_API_TOKEN": "username:YOURHEXTOKEN"
}
}
}
}