A zero-dependency MCP server for the daily.dev Public API - feeds, search, bookmarks, and profile management for any Model Context Protocol client.
dailydev-mcp gives AI agents (Claude, Cursor, OpenCode, and any other MCP client) direct, structured access to daily.dev: your personalized feed, trending posts, keyword and semantic search, bookmarks, and your profile and tech stack.
Your agent stops being limited by its training cutoff, and you can manage your daily.dev presence without opening the browser.
LLMs have knowledge cutoffs. daily.dev aggregates articles from 2,000+ sources, validated by community engagement, with a structured taxonomy for precise discovery - so an agent can stay current, get diverse perspectives, and understand what the developer community actually cares about.
The daily.dev Public API is free to use with a personal access token. This server is a thin, correct, zero-dependency wrapper around it - built on Go's standard library only, shipped as a single static binary.
| Group | Tools |
|---|---|
| Profile | get_profile, update_profile, list_experiences, create_experience, update_experience, delete_experience |
| Tech stack | list_stack, add_stack_item, update_stack_item, remove_stack_item |
| Feeds | get_feed (for you / popular / discussed / by tag / by source), list_tags, list_custom_feeds, get_custom_feed_posts |
| Search | search_posts, search_tags, search_sources, recommend_articles (keyword or semantic; experimental endpoint) |
| Posts | get_post, get_post_comments |
| Bookmarks | list_bookmarks, search_bookmarks, add_bookmark, remove_bookmark, move_bookmark, list_bookmark_lists, create_bookmark_list, delete_bookmark_list |
| Feed filters | get_feed_filters, update_tag_filter, update_source_filter (global or per custom feed) |
| Notifications | get_notifications, mark_notifications_read |
API responses are passed through as pretty-printed JSON, so the agent sees exactly what the API returns - including error responses.
go install github.com/itokun99/dailydev-mcp@latestOr build from source:
git clone https://github.com/itokun99/dailydev-mcp.git
cd dailydev-mcp
go build -o dailydev-mcp .- Create a personal access token at https://daily.dev/settings/api (free accounts included).
- Export it:
export DAILY_DEV_TOKEN="dda_your_token_here"On macOS you can keep it in the Keychain instead:
security add-generic-password -a "$USER" -s "daily-dev-api" -w "dda_your_token"
export DAILY_DEV_TOKEN=$(security find-generic-password -a "$USER" -s "daily-dev-api" -w 2>/dev/null){
"mcpServers": {
"dailydev": {
"command": "dailydev-mcp",
"env": {
"DAILY_DEV_TOKEN": "dda_your_token_here"
}
}
}
}Use the full path to the binary if it is not on PATH. The server speaks MCP over stdio (JSON-RPC 2.0, one message per line) and logs diagnostics to stderr only.
Once connected, just ask:
- "What's trending on daily.dev about Go this week?"
- "Search daily.dev for MCP server design patterns and summarize the top results."
- "Bookmark the top 3 posts from my For You feed."
- "Create a bookmark list called 'Research: Postgres' and move the Postgres posts into it."
- "Update my daily.dev bio and add Go to my stack."
- "Follow the
golangandpostgrestags, and blockcrypto." - "Give me my weekly dev digest from my For You feed."
- Free accounts: 200 requests per month.
- daily.dev Plus: 60 requests per minute, and a few features are Plus-only (for example, moving a bookmark between lists).
- The server surfaces the API's rate-limit and plan errors verbatim (401, 403, 404, 429) so your agent can explain exactly why a call failed.
- The token is sent only to
api.daily.devand never logged. - Never commit the token; use environment variables or your OS keychain.
go build ./...
go test ./...
go vet ./...DAILY_DEV_API_BASE overrides the API base URL (useful for tests or a local proxy).
Observed against the daily.dev Public API v1.0.0 (2026-09). These are server-side behaviours - this MCP server passes them through verbatim:
- Some IANA timezones are rejected.
PATCH /profile/refuses zones likeAsia/Jakarta,Asia/Singapore,Asia/Manila, andAsia/Makassarwithinvalid timezone, whileAsia/Tokyo,Asia/Bangkok, andAsia/Novosibirskare accepted - the API's validator list appears incomplete. If your zone is rejected, the API (not this server) is the cause. POST /profile/experiences/can return HTTP 500 with an empty body for every payload shape, including the spec-minimaltype/title/startedAt. It is a server-side failure; retry later.startedAtmust be a full RFC 3339 date-time (2019-06-01T00:00:00.000Z); a plain date (2019-06-01) is rejected withmust match format "date-time".- Stack items carry their title under
tool.title(nottitle), and adding a tool that already exists fails withStack item already exists in your profile.
MIT - see LICENSE.