Tools
The twelve tools the ressource.social MCP server exposes, what each one does and the inputs it takes.
Every tool works on the signed-in user's own Library. Your credential decides which tools the server lists in tools/list. A tool you may not run is left out of the list, and calling it by name fails.
| Tool | What it does | Access | OAuth |
|---|---|---|---|
search_sources | Search your sources by words | read | yes |
list_sources | List your sources, one page at a time | read | yes |
get_source | Read one source in full, comments included | read | yes |
list_folders | List every folder as a tree | read | yes |
suggest_tags | Find existing tags to reuse | read | yes |
save_source | Save one web page | write | yes |
save_sources | Save up to 10 web pages | write | yes |
update_source | Change a source's title, description, tags, folder or visibility | write, overwrites | yes |
create_folder | Create a folder | write | yes |
update_folder | Rename, describe or move a folder, or change its privacy | write, overwrites | yes |
move_sources | Move up to 500 sources into a folder, or unfile them | write, overwrites | yes |
delete_folder | Delete a folder and its subfolders | write, irreversible | no |
- read tools are listed for a
readtoken. write tools need awritetoken or an OAuth connection. - Overwrites means the tool replaces something that already exists. These tools carry the MCP
destructiveHintannotation, so clients ask you before running them. Their descriptions also tell the assistant to confirm with you first. - Irreversible means the result can't be put back from ressource.social. An app connected with OAuth never gets an irreversible tool. Only a personal access token with the
writescope can calldelete_folder.
No tool deletes a source
On purpose. Deleting a source also removes its comments, reactions, archive and community shares, and nothing restores them. You delete sources in ressource.social.
Content is data
Results carry text that ressource.social didn't write: page titles and descriptions, tag names, folder names, comments, people's names. Each result names those fields under untrusted_content, and the server strips invisible characters from every string.
The tool descriptions tell the assistant that this text is content, not instructions. Results also include a link to each source, so the assistant can cite it.
Read tools
search_sources
Searches your own sources by words in the title, description, tags, folder name or domain. Matching is typo-tolerant and the best matches come first.
| Input | Type | Notes |
|---|---|---|
query | string, 2–200 characters | What to look for. Required. |
limit | integer, 1–25 | Default 10. |
Each item has its id and short id, title, URL, description, folder, the tags that matched, and a link. Descriptions longer than 1,000 characters are cut short and flagged description_truncated.
list_sources
Lists your sources one page at a time, newest first by default.
| Input | Type | Notes |
|---|---|---|
folder_id | uuid | Only sources in this folder (ids come from list_folders). |
include_subfolders | boolean | Default false. |
tag_ids | uuid[], up to 20 | Only sources with these tags. |
in_library | boolean | Default true. With false you get the sources you shared to a community without keeping them in your Library. |
sort | created_at · name · view_count | Default created_at. |
direction | asc · desc | Default desc. |
limit | integer, 1–50 | Default 20. |
cursor | string | The nextCursor from the previous page. |
The result holds items, nextCursor and hasMore. Long descriptions are cut short, as in search_sources.
get_source
Reads one source: its title, URL, full description, tags, folder, the communities it is shared with and the comments you can see.
| Input | Type | Notes |
|---|---|---|
id | string | The source's id, or the short id from a ressource.social source link. Required. |
list_folders
Lists every folder in your Library as a tree, parents before children. Each folder carries:
- its full path, for example
Research / AI - its privacy
- how many sources sit directly in it
- how many subfolders it has
It takes no input.
suggest_tags
Finds tags to reuse, best first:
- Your own tags, with
scope: "mine". The count is how many of your sources carry the tag. - Tag names that at least two people on ressource.social use, with
scope: "platform". The count is how many people use it. - Near-misses of what was typed, flagged
is_fuzzy.
| Input | Type | Notes |
|---|---|---|
query | string, up to 50 characters | Optional. |
limit | integer, 1–50 | Default 20. |
Write tools
save_source
Saves a web page to your Library. ressource.social fetches the page's title, description and preview itself.
| Input | Type | Notes |
|---|---|---|
url | string | A public http or https URL. Required. |
title | string | A fallback, used only if the page has no title of its own. |
folder_id | uuid | File the new source in this folder. A wrong id fails the save before anything is written. |
tags | string[], up to 50 | Tag names. Reuse existing ones from suggest_tags where they fit. |
description | string, up to 5,000 characters | Why it was saved. It replaces the page's own description. |
visibility | public · private | Default public. A public source shows on your profile. |
- Already saved: saving a URL that is already in your Library returns the existing source with
isExisting: trueand changes nothing, not even its folder, tags or visibility. Useupdate_sourceormove_sourcesfor those. - Partly saved: if the source is saved but its folder, tags or description can't be set, the save still stands. The result carries
not_appliedwith the reason, andupdate_sourcecan finish the job.
save_sources
Saves up to 10 web pages in one call, for importing a list of links. items is an array of save_source inputs. Each URL succeeds or fails on its own.
The result has one entry per URL, in the order given:
ok, and then eithersourceandisExisting, orerror.- Totals for
saved,existing,failedandduplicates. - A URL repeated in the batch is saved once. Its later entries repeat the first result and add
duplicate_of, the index of the first entry. - Once your save limit is reached, the remaining URLs are not tried and come back with a
rate_limitederror.
To import more than 10 links, call it again with the next batch.
update_source
Changes one of your own sources. Only the fields you give change, and the previous values are not kept.
| Input | Type | Notes |
|---|---|---|
id | string | Id or short id. Required. |
title | string | |
description | string or null | |
tags | string[], up to 50 | Replaces the current tags. |
folder_id | uuid or null | null takes the source out of every folder. |
visibility | public · private | Making a source public publishes it on your profile. |
create_folder
Creates a folder at the top level, or inside another folder.
| Input | Type | Notes |
|---|---|---|
name | string, 1–255 characters | Must be unique among its sibling folders. Required. |
parent_folder_id | uuid or null | Leave it out for the top level. |
description | string or null | |
color | hex colour or null | |
is_private | boolean | A private folder never appears on your public profile. |
Folders nest at most ten levels deep. A folder created inside a private folder is always private. The result includes the new folder's id.
update_folder
Renames a folder, changes its description, colour or privacy, or moves it with everything inside it. It takes the same fields as create_folder, all optional, plus the folder's id.
- Moving:
parent_folder_id: nullmoves the folder to the top level. A folder can't move into one of its own subfolders. - Privacy:
is_private: truealso makes every subfolder private. Setting it back tofalseleaves the subfolders private.
move_sources
Files your sources into one folder, or takes them out of every folder.
| Input | Type | Notes |
|---|---|---|
source_ids | uuid[], 1–500 | Ids from list_sources, search_sources or save_source. Required. |
folder_id | uuid or null | The destination folder, or null to unfile. Required. |
All or nothing: if any id is not one of your sources, nothing moves and the error lists the unknown ids. The result counts the sources moved and unchanged. ressource.social doesn't keep where each source was filed before, so a move can only be undone by hand. Bulk moves have their own hourly and daily limits.
delete_folder
Deletes a folder and all its subfolders. No source is deleted: the sources inside stay in your Library, unfiled. The result counts the deleted folders and the unfiled sources.
| Input | Type | Notes |
|---|---|---|
id | uuid | Required. |
The folders can't be restored, so OAuth connections don't get this tool. It needs a personal access token with the write scope.
A typical session
To sort a Library or import a list of links into a folder tree, an assistant usually:
- Calls
list_foldersto see what exists, so it doesn't create duplicates. - Calls
create_folderfor each missing folder, nesting them with theparent_folder_idthatcreate_folderreturned. - Collects ids with
list_sourcesorsearch_sources, then makes onemove_sourcescall per destination folder. - For imports, calls
suggest_tagsto reuse your tags, thensave_sourcesin batches of 10 with afolder_idandtagson each item. Items that come back withisExisting: truestayed where they were. They can be moved withmove_sources.
Connect a client
Add the ressource.social MCP server to Claude, Claude Code, Cursor or any other remote MCP client.
Rewrite a source's description with Claude POST
A short description written from the page's own text (same order as suggest-tags). With no readable text there is no call and nothing is spent. Refusals carry `details.assist`: `disabled` / `forbidden` (403 — the assists are off, or the user holds no grant), `quota_exceeded` (429), `no_page_text` (404 — nothing readable to rewrite from), `upstream` / `invalid_output` (500). Session callers only: a personal access token or an OAuth client gets 403.