feedly-mcp
Provides tools for reading and managing Feedly subscriptions, including listing folders and feeds, fetching recent articles, checking unread counts, searching for new feeds to subscribe to, and optionally marking articles or folders as read.
Click on "Deploy 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., "@feedly-mcpwhat's new in my AI feeds?"
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.
feedly-mcp
Read your Feedly subscriptions from Claude. Ask "what's new in my AI feeds?" and get an answer, without opening a browser.
Not published yet. The server works and all six tools have been exercised against a live account, but it is not on npm and there are no releases. Install from source — that path works today; the
npxand.mcpbones do not.
What it does
Six tools that let an agent read your Feedly account:
Tool | What it gives you |
| your folders, with unread counts |
| the feeds in a folder |
| recent articles, cleaned up and trimmed |
| how much is waiting, total and per folder |
| find new sources to subscribe to |
| mark articles as read (off by default) |
Related MCP server: RSS Feed MCP Server
What it does not do
This is a connector, not a reader app. It translates a request into a Feedly API call and hands back a clean answer. It does not store your articles, build a searchable archive, rank things over time, or send you digests.
Those are all good things to want — build them on top of this, in a Claude Project, a skill, or a scheduled task. Keeping them out is what makes this small enough to trust.
Privacy
Everything runs on your own machine.
Your Feedly token stays local. It is never sent anywhere except
api.feedly.com.No account with us, no server in the middle, no telemetry.
Nothing about what you read is stored beyond a short-lived local cache.
Requirements
Node.js 20 or newer — check with
node --versionA Feedly account and an API token (step 1 below)
Claude Desktop, Claude Code, or any other MCP client
Step 1 — Get a Feedly API token
Log in to Feedly in your browser.
Follow the instructions there to generate a developer access token.
Copy the token somewhere safe for the next step. It is a password — treat it like one.
Two things to know before you go further.
Tokens expire. On a free account a developer token is valid for about 30 days, after which you repeat this step. Paid plans can refresh automatically. This is Feedly's policy, not something this tool can work around.
Token availability depends on your plan. Feedly's own documentation is inconsistent about which account tiers can self-issue API tokens. If the page above does not give you a token, this connector cannot work with your account, and there is no workaround short of contacting Feedly.
Step 2 — Install
Build from source — the only path that works today
git clone https://github.com/fredrsat/feedly-mcp
cd feedly-mcp
npm install
npm run buildThen store your token in a file only you can read, so it never has to go into a client config in plain text:
mkdir -p ~/.config/feedly-mcp
printf '%s' 'paste-your-token-here' > ~/.config/feedly-mcp/token
chmod 600 ~/.config/feedly-mcp/tokenThe server refuses to read that file if it is group- or world-readable, and tells you how to fix it.
Register it with your client, using an absolute path to the built entry point:
# Claude Code — --scope user makes it available in every directory
claude mcp add feedly --scope user -- node /absolute/path/to/feedly-mcp/dist/cli.js
claude mcp list # should report: feedly ... ✔ ConnectedFor Claude Desktop, add this to
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or
%APPDATA%\Claude\claude_desktop_config.json (Windows), then quit and reopen the
application — closing the window does not reload MCP servers:
{
"mcpServers": {
"feedly": {
"command": "node",
"args": ["/absolute/path/to/feedly-mcp/dist/cli.js"]
}
}
}Already have other servers under mcpServers? Add feedly alongside them rather
than replacing the block.
If you move the repository afterwards, re-register it — the path is absolute. Rebuilding in place is picked up automatically.
Once published
Neither of these works yet; they are what installing will look like after the first release.
One-click, Claude Desktop. Download feedly-mcp.mcpb from the Releases page
and drag it into Settings → Extensions. A settings form appears; the token
goes into your operating system's keychain rather than a plain-text file, and
everything in Configuration is editable from that form.
From npm. npx -y feedly-mcp as the command, with FEEDLY_TOKEN in the
client's env block, or the token file above.
Step 3 — Check that it works
Before asking Claude anything, confirm the connection from your terminal:
node dist/cli.js doctorA healthy result looks like this:
✓ Config loaded from /Users/you/.config/feedly-mcp/config.toml
scope.default_folder = Tech ← file
✓ Token found (file /Users/you/.config/feedly-mcp/token)
✓ Connected to Feedly you@example.com
plan: FeedlyProYearly
✓ 8 folders, 70 feeds
Tech 70 feeds 4317 unread user/<uuid>/category/Tech
Tech - Research 11 feeds 68 unread user/<uuid>/category/<uuid>
Tech - Tooling 6 feeds 171 unread user/<uuid>/category/<uuid>
…
API calls used today: 4 of 50 (resets in 11h34m)
Configured ceiling: 40/day account-wide, 10/session
Through this server: 4 today, 4 in this run
✓ Everything checks out.Useful flags: -v prints every resolved setting and where it came from,
--refresh clears the cache first.
doctor never prints your token. Use the folder list it gives you when filling
in scope in step 4.
If something is wrong, jump to Troubleshooting.
Step 4 — Configure (optional)
The defaults are sensible and you can skip this entirely. The one setting worth looking at early is scope — which folders Claude is allowed to see at all.
Create ~/.config/feedly-mcp/config.toml:
[scope]
# Only these folders are visible to the agent. Leave empty for all of them.
include_folders = ["AI", "Longform"]
# Used when you ask about articles without naming a folder.
default_folder = "AI"
[defaults]
hours = 8 # how far back get_articles looks
limit = 100 # max articles per callTwo reasons to set include_folders:
Privacy. Your work folder does not need to be readable by an agent.
Focus. Fewer folders means shorter answers and less context spent on material you did not ask about.
If you installed via Option A, edit these in the extension's settings form instead — same options, no file to find.
Full list of settings: docs/configuration.md
Using it
Just ask. Some things that work well:
"What's new in my AI feeds since yesterday?"
"Anything worth reading in AI - Research this week?"
"How many unread articles do I have, broken down by folder?"
"Find me feeds about local LLM inference"
"Summarise the top 5 by engagement from the last 8 hours"
You don't need to know folder IDs. Folder names work, and Claude can list them.
Full tool reference: docs/tools.md
Limits worth knowing before you build on this
These come from running it against a real, busy account rather than from theory.
Volume beats your time window. On a folder producing ~42 articles an hour,
asking for 24 hours with a limit of 320 actually covers under eight — limit
runs out first. Responses report covered_hours alongside window_hours so the
gap is visible, but raising the limit is usually the wrong fix: it costs more
quota and more context to move the blind spot slightly. Narrow the folder.
Scope works on folders, not feeds. If one noisy source and one excellent source sit in the same folder, no configuration here separates them — on the account this was tested against, a single feed produced 140 of 320 articles and none of the useful stories, while a feed with 2 articles produced most of them. The fix was unsubscribing in Feedly. Practical order: drop dead-weight feeds first, then set scope. The other way round throws away good sources to escape bad ones.
Counts that report what a write did deserve suspicion. Feedly returns no
count for folder-level marking, so mark_read measures unread totals before and
after. That is close, not exact — Feedly's own counts lag a moment. For anything
that matters, check unread_counts yourself.
A cleanup window older than your backlog marks nothing. Unread settles at
roughly window_days × articles_per_day. A 7-day older_than against ~570
articles a day holds the backlog near 4000 forever, however often you sweep.
Budget from the response, not from a plan. Every result carries
calls_left_today and calls_left_session. Read them and adapt rather than
deciding a call count up front — the daily figure is account-wide, so your own
browsing moves it underneath you.
Your API quota — please read this
Your daily API quota is small — smaller than Feedly's documentation suggests.
Measured against the live API, a developer token on a paid Pro Plus account reports a ceiling of 50 calls per day, resetting around midnight UTC. Feedly's own docs describe 250 on free and 500 on Pro. Plan for 50.
That is roughly eight conversations a day if the agent is chatty, and the quota is shared with everything else touching your account — including Feedly in your browser, which stops working too if an agent drains it.
So this tool defends the budget on your behalf:
Folder and subscription lists are cached on disk for 24 hours.
Repeated identical requests within 15 minutes are served from cache.
One call fetches a whole folder — never one call per feed.
Hard ceilings at 10 calls per session and 40 per day, leaving headroom for you. The daily one is measured account-wide, so browsing Feedly yourself counts against it — that is deliberate, so an agent cannot lock you out of your own reader.
Every response reports how much quota is left and how stale the data is. Below 10 calls remaining, you get a warning.
Check your own ceiling with doctor — it prints the limit your account actually
reports. If it says something higher than 50, you can safely raise the budget in
configuration.
Marking articles as read
mark_read is permanent. Feedly has no undo, and recovery means emailing
their support. So it ships disabled.
To enable single-article marking:
[writes]
enabled = trueTo also allow marking an entire folder read in one go — a much bigger blast radius — you must turn on a second switch deliberately:
[writes]
enabled = true
bulk_mark_read = trueUnsubscribing is not implemented at all, on purpose. Do that in Feedly.
Troubleshooting
doctor says the token is missing
The server looks in this order: the FEEDLY_TOKEN environment variable, then
the file named by feedly.token_file. Confirm your token reached whichever one
you used — a common cause is editing the config file while Claude Desktop passes
an empty environment variable that wins over it.
"Token expired" or 401
Free-account tokens last about 30 days. Repeat step 1 and update the token where you stored it. This is expected and will keep happening; it is not a bug.
Claude doesn't see the tools
Quit and reopen Claude Desktop completely — a window restart does not reload MCP
servers. Then check your JSON is valid (a trailing comma is the usual culprit),
and that node --version reports 20 or higher.
"Rate limit exceeded" (429)
You have used your Feedly quota for the day. It resets on Feedly's schedule; the error message includes the reset time. The server will not retry automatically — retrying would only dig the hole deeper.
"Daily budget exhausted"
Different from the above: this is this tool's ceiling, not Feedly's, and you
still have real quota left. Raise budget.daily_calls if you want more.
A folder is "outside configured scope"
scope.include_folders is set and that folder isn't in it. Add it, or clear the
list to allow everything.
Cached data looks like it belongs to another account
Clear the cache and try again:
rm -rf ~/.cache/feedly-mcpDevelopment
npm run build # compile to dist/
npm test # 104 tests, no API calls
npm run typecheck # tsc --noEmitThere is also an end-to-end check that drives the built server over stdio as a real MCP client and exercises every tool against your account. It costs a handful of API calls out of the daily 50, and prints the remaining quota as it goes:
node --env-file=.env scripts/smoke.mjsmark_read is only exercised in its refusal paths, there and everywhere else.
It is irreversible, so there is no safe way to test the success path.
Contributing
Issues and pull requests welcome. The design rationale — including which features are deliberately excluded — lives in feedlymcpspec.md. Read it before proposing a feature; if your idea is in the "not in scope" list, that is a decision rather than an oversight, though it is one you are welcome to argue with.
The spec and these docs are the contract. If you change a return shape or a config key, change both together or neither.
License
MIT
Available Tools
6 toolsget_articlesget_articles (unavailable — configuration error)CRead-only
feedly-mcp could not start: No Feedly token found. Set the FEEDLY_TOKEN environment variable, or write the token to a file and point feedly.token_file at it. Looked in: FEEDLY_TOKEN, /root/.config/feedly-mcp/token. Get a token at https://feedly.com/v3/auth/dev
Nothing can be read from Feedly until this is fixed. Run "feedly-mcp doctor" for the full check. This is a local configuration problem — do not work around it by fetching the news another way.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declared, the description does add genuine behavioral context: the exact auth requirement (FEEDLY_TOKEN or a token file), the paths checked, and the fact that all reads fail until configured. That is real transparency about preconditions, though it describes a broken-server state rather than the tool's actual read behavior (pagination, limits, filters) when functioning.
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 error text is front-loaded with the fix and wastes little, but as a tool description it is entirely off-purpose — every sentence is about configuration remediation rather than the tool. Structure is fine; relevance to the tool's job is absent.
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?
Nothing an agent needs to invoke get_articles is present: no return format, no filters (unread counts, feed/folder scoping), no relationship to siblings. For a read tool with no output schema and five sibling read tools, the description is completely inadequate.
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 tool takes zero parameters and schema coverage is 100%, so there is no parameter semantics for the description to add. Baseline 4 applies; no penalty for omitting nonexistent parameter docs.
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 never states what get_articles does. It is an MCP startup failure notice about a missing Feedly token, so an agent learns nothing about the tool's verb or resource, and it cannot be distinguished from its siblings (search_feeds, unread_counts, etc.). This is a placeholder error, not a purpose statement.
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 does give one useful operational instruction — 'nothing can be read from Feedly until this is fixed' and 'do not work around it by fetching the news another way' — which tells the agent the tool is unavailable. But it offers no routing guidance against the sibling tools it would otherwise be chosen over, so it is not usage guidance in the normal sense.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedslist_feeds (unavailable — configuration error)CRead-only
feedly-mcp could not start: No Feedly token found. Set the FEEDLY_TOKEN environment variable, or write the token to a file and point feedly.token_file at it. Looked in: FEEDLY_TOKEN, /root/.config/feedly-mcp/token. Get a token at https://feedly.com/v3/auth/dev
Nothing can be read from Feedly until this is fixed. Run "feedly-mcp doctor" for the full check. This is a local configuration problem — do not work around it by fetching the news another way.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true is not contradicted — the text confirms nothing can be read. It does surface one genuinely useful behavioral fact (the server is unavailable and why), but it discloses nothing about the tool's actual runtime behavior, return shape, or limits once configured. For a definition that can never execute, this is minimal.
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 failure cause is front-loaded, which is good, but three sentences are spent on remediation paths (env var, token file, lookup locations, URL, doctor command) that belong in setup documentation, not a tool definition an agent reads at call time.
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 that is supposed to list feeds in a family of six Feedly tools, the description supplies no purpose, no scope, and no relationship to siblings. It is complete only as an error notice, not as a tool definition.
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 schema has zero parameters, so per the baseline rule a 4 applies. There is nothing for the description to clarify or compensate for on this dimension.
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 never states what list_feeds does. It is entirely an installation/configuration error message about a missing FEEDLY_TOKEN, so an agent learns nothing about the tool's verb, resource, or scope relative to siblings like get_articles or search_feeds. Misleading-by-omission at best.
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 gives operational instructions (set FEEDLY_TOKEN, run the doctor, don't work around it) but zero guidance on when to select this tool versus its five siblings. The only 'when' implied is 'never, until you fix config', which is not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_folderslist_folders (unavailable — configuration error)DRead-only
feedly-mcp could not start: No Feedly token found. Set the FEEDLY_TOKEN environment variable, or write the token to a file and point feedly.token_file at it. Looked in: FEEDLY_TOKEN, /root/.config/feedly-mcp/token. Get a token at https://feedly.com/v3/auth/dev
Nothing can be read from Feedly until this is fixed. Run "feedly-mcp doctor" for the full check. This is a local configuration problem — do not work around it by fetching the news another way.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and the text does not contradict that, but it discloses nothing about the tool's actual behavior — no return shape, pagination, or auth flow for the tool. It describes the server's failed state, not the operation.
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 text is readable and front-loaded, but every sentence is about an environment failure and none earns its place as a tool definition. It is well-organized for an error message and inappropriate as a description.
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 zero-parameter, read-only listing tool with no output schema, an agent still needs to know what gets listed. The description supplies none of that, leaving the definition unusable for tool selection.
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 tool takes zero parameters, so there is nothing for the description to clarify; the baseline for a parameterless tool applies. No parameter-level information is missing or needed.
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 never states what list_folders does. It is an MCP startup-failure message about a missing Feedly token, so an agent cannot tell that this tool lists folders, nor distinguish it from list_feeds or unread_counts.
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 only guidance is operational ('run feedly-mcp doctor', 'do not fetch the news another way'), which concerns fixing a local configuration problem rather than when to select this tool versus its siblings. No use context for the tool itself is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_readmark_read (unavailable — configuration error)DRead-only
feedly-mcp could not start: No Feedly token found. Set the FEEDLY_TOKEN environment variable, or write the token to a file and point feedly.token_file at it. Looked in: FEEDLY_TOKEN, /root/.config/feedly-mcp/token. Get a token at https://feedly.com/v3/auth/dev
Nothing can be read from Feedly until this is fixed. Run "feedly-mcp doctor" for the full check. This is a local configuration problem — do not work around it by fetching the news another way.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Read-only annotations are present and uncontradicted, and the description does disclose a real behavioral fact: the tool is unusable until FEEDLY_TOKEN is configured, and it names the paths checked. But it says nothing about what the tool actually does once working (what gets marked, whether the change is reversible), so the disclosure is incidental rather than useful tool behavior.
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 text is organized in a workable order (problem, remedy, escalate to doctor), but it spends every sentence on configuration and none on the tool itself, so nothing is front-loaded that helps an agent select or invoke it.
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?
There is no output schema and no parameters, so very little description is strictly required, and it correctly signals the tool is dead. However, as a definition for mark_read it is effectively empty: a reader learns the server is broken but never what the tool is for.
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 schema has zero parameters at 100% coverage, which sets a baseline of 4. The description neither needs to nor does add parameter meaning, so this dimension is unburdened.
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 never states what mark_read does. It is entirely a configuration-failure notice ('could not start: No Feedly token found'), so an agent cannot learn the tool's verb or resource, let alone distinguish it from get_articles, unread_counts, or search_feeds.
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 only guidance given is how to fix the environment and an instruction not to work around the failure. There is no statement of when to call mark_read versus any sibling tool, or what inputs select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_feedssearch_feeds (unavailable — configuration error)CRead-only
feedly-mcp could not start: No Feedly token found. Set the FEEDLY_TOKEN environment variable, or write the token to a file and point feedly.token_file at it. Looked in: FEEDLY_TOKEN, /root/.config/feedly-mcp/token. Get a token at https://feedly.com/v3/auth/dev
Nothing can be read from Feedly until this is fixed. Run "feedly-mcp doctor" for the full check. This is a local configuration problem — do not work around it by fetching the news another way.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, but the description adds substantial context: a required FEEDLY_TOKEN auth prerequisite, the exact paths checked, a remediation URL, and the hard constraint that no read can succeed until fixed. This is strong behavioral disclosure beyond the annotation, though it describes failure state rather than the tool's normal behavior.
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 message is front-loaded with the failure and remediation, and every sentence is actionable (set token, look here, get a token, run doctor, don't work around). It is slightly verbose but not padded.
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 zero-parameter, no-output-schema tool, the failure context is complete enough to stop an agent from retrying blindly. What is missing is any statement of the tool's actual function once the config is repaired, leaving the definition incomplete as a tool description.
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 tool takes zero parameters, so the baseline is 4. There is nothing for the description to clarify about arguments.
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 never states what search_feeds does; it is entirely an error/startup-failure message. An agent reading it cannot tell whether the tool searches feeds, articles, or something else. The stated purpose is 'could not start,' which is misleading as a purpose statement.
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 does give one directive: don't work around the failure by fetching news another way, and run 'feedly-mcp doctor.' However, it gives no guidance on when to use search_feeds versus siblings like get_articles or list_feeds, which is the core usage question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unread_countsunread_counts (unavailable — configuration error)CRead-only
feedly-mcp could not start: No Feedly token found. Set the FEEDLY_TOKEN environment variable, or write the token to a file and point feedly.token_file at it. Looked in: FEEDLY_TOKEN, /root/.config/feedly-mcp/token. Get a token at https://feedly.com/v3/auth/dev
Nothing can be read from Feedly until this is fixed. Run "feedly-mcp doctor" for the full check. This is a local configuration problem — do not work around it by fetching the news another way.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true is already in the annotations, and the description does not contradict it. The text is transparent about a failure mode (missing FEEDLY_TOKEN, searched locations, remediation URL), but it discloses nothing about this tool's actual runtime behavior — return shape, scope, or cost — so it cannot support correct invocation once the server works.
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 message is front-loaded and reasonably structured — problem, cause, locations searched, remediation, and a warning against workarounds. However it spends most of its length on token-file plumbing and a URL that do nothing to help an agent select or invoke unread_counts.
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?
There is no output schema, so the description would need to convey what unread_counts returns (e.g., unread counts per feed/folder) and its scope, and it does not. What it does explain completely is the configuration failure, which is not the information an agent needs to call this tool correctly.
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 tool takes zero parameters, so the baseline expectation is that no parameter explanation is needed. The description does not confuse this by inventing inputs, so 4 is appropriate; the surrounding config text is unrelated to 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 never states what unread_counts does. It announces that the whole feedly-mcp server failed to start because no token was found, so an agent learns nothing about the verb or resource of this specific tool. For a name like unread_counts, the reader must guess it returns unread article counts.
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 does give one directive — don't work around the failure by fetching news another way — and points to a doctor command, but this is remediation guidance for a broken server, not guidance on when to choose unread_counts over get_articles or search_feeds. Nothing routes the agent among the 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.
6 tool updates
v0.1.0- First observed
get_articles - First observed
list_feeds - First observed
list_folders - First observed
mark_read - First observed
search_feeds - First observed
unread_counts
TDQS
Scored across 6 tools
Tool names largely describe distinct actions on distinct resources (get_articles, mark_read, list_folders, list_feeds, search_feeds, unread_counts). The only mild overlap is search_feeds vs list_feeds and get_articles vs unread_counts, but names alone make intent discernible. Descriptions are unusable (identical startup errors), so disambiguation rests entirely on names.
Most tools follow a verb_noun snake_case pattern (get_articles, search_feeds, mark_read, list_folders, list_feeds). The one deviation is unread_counts, which is a noun phrase rather than an action, a minor inconsistency but still readable.
Six tools is a reasonable, well-scoped set for a Feedly reader covering reading, searching, folder/feed listing, and read-state. It is slightly lean for the domain but nothing feels padded or redundant.
The surface covers read-side operations and mark_read, but there are no operations to subscribe/unsubscribe feeds, create or edit folders, or save articles to boards for later, which are core Feedly workflows. Agents would hit dead ends for feed management tasks.
Maintenance
Related MCP Connectors
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Real-time Claude & Anthropic news from your own Claude — free, no API key.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Zotero MCP server for Claude and ChatGPT: search, citations, safe writes, PDF passages and pages.
Related MCP Servers
- AlicenseCqualityBmaintenanceModel Context Protocol Server for aggregating RSS feeds in Claude Desktop127Mozilla Public 2.0
- FlicenseNot gradedqualityCmaintenanceEnables Claude to fetch, parse, and manage RSS/Atom feeds through the Model Context Protocol. It supports feed registration and retrieval, allowing users to access article summaries and full content from multiple sources via natural language.1-
- FlicenseAqualityDmaintenanceAn MCP server that enables users to interact with their Feedbin RSS account directly through Claude. It provides tools for reading articles, managing read and starred states, and browsing subscribed feeds and tags.151-
- AlicenseNot gradedqualityDmaintenanceConnects Claude Desktop to your Obsidian vault, enabling reading, writing, searching, and organizing notes locally.1MIT