Skip to main content
Glama
fredrsat

feedly-mcp

by fredrsat

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 npx and .mcpb ones do not.


What it does

Six tools that let an agent read your Feedly account:

Tool

What it gives you

list_folders

your folders, with unread counts

list_feeds

the feeds in a folder

get_articles

recent articles, cleaned up and trimmed

unread_counts

how much is waiting, total and per folder

search_feeds

find new sources to subscribe to

mark_read

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 --version

  • A 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

  1. Log in to Feedly in your browser.

  2. Visit https://feedly.com/v3/auth/dev.

  3. Follow the instructions there to generate a developer access token.

  4. 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 build

Then 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/token

The 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 ... ✔ Connected

For 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 doctor

A 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 call

Two 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 = true

To 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 = true

Unsubscribing 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-mcp

Development

npm run build      # compile to dist/
npm test           # 104 tests, no API calls
npm run typecheck  # tsc --noEmit

There 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.mjs

mark_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 tools
get_articlesget_articles (unavailable — configuration error)C
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.3/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters4/5

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.

Purpose1/5

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.

Usage Guidelines2/5

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)C
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters4/5

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.

Purpose1/5

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.

Usage Guidelines2/5

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)D
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.6/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters4/5

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.

Purpose1/5

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.

Usage Guidelines1/5

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)D
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1.9/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose1/5

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.

Usage Guidelines1/5

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)C
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose1/5

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.

Usage Guidelines2/5

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)C
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.2/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose1/5

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.

Usage Guidelines2/5

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.

  1. 6 tool updatesv0.1.0
    • First observedget_articles
    • First observedlist_feeds
    • First observedlist_folders
    • First observedmark_read
    • First observedsearch_feeds
    • First observedunread_counts

TDQS

C2.5/5.0

Scored across 6 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers