redditapis-mcp 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.2 (2026-09-06)
4
+
5
+ ### Added
6
+
7
+ - **`reddit_post_visibility`.** Is a post still publicly visible, or did it quietly stop being so? A removed Reddit post still returns when you fetch it by id, with its title and score, so asking the post does not answer the question. This fetches the post and then one page of its author's submitted listing and compares them, returning a verdict of `live`, `not_visible` or `undecidable` with a plain-language reason and a `confident` flag. It never says WHY a post is not visible: a moderator removal, an admin removal, a spam filter and an author who has hidden their post history are indistinguishable from outside, and only one of them is a removal. `undecidable` is a real answer, not a failure. Two upstream calls, billed as one request at $0.004.
8
+
9
+ ## 0.5.1 (2026-09-06)
10
+
11
+ ### Fixed
12
+
13
+ - **The npm package page was showing a description cut off mid-word.** `package.json` carried a 394-character description; npm stores at most 255 and truncates the rest without an error or a warning, so the visible end of the description on npmjs.com was the fragment `register/test/dele`. 139 characters were being silently discarded. Measured against `registry.npmjs.org` rather than guessed. The description is now 249 characters and ends as a sentence, and `scripts/prepublish-tenant-check.mjs` refuses to publish one that is over the bound or that does not end in a full stop, the second check being the one that catches a cut string regardless of its length.
14
+
3
15
  ## 0.5.0 (2026-09-06)
4
16
 
5
17
  ### Added
package/README.md CHANGED
@@ -139,6 +139,7 @@ A few conventions across the catalog:
139
139
 
140
140
  | Tool | Endpoint | What it does |
141
141
  |---|---|---|
142
+ | `reddit_post_visibility` | `GET /api/reddit/post/{id}/visibility` | Is a post still publicly visible, or did it quietly stop being so? Fetches the post and one page of its author's listing and compares. Returns `live`, `not_visible` or `undecidable` with a reason, and never claims to know WHY. Two upstream calls, $0.004. |
142
143
  | `reddit_post` | `GET /api/reddit/post/{id}` | A single post by its base-36 `id` (no `t3_` prefix): title, author, score, text, permalink, subreddit, url. |
143
144
  | `reddit_post_comments` | `GET /api/reddit/comments` | A post plus its full threaded comment tree, fetched by `permalink`. |
144
145
  | `reddit_by_id` | `GET /api/reddit/by_id/{fullnames}` | Bulk-hydrate up to 100 posts in one call from a comma-separated list of `t3_` fullnames. |
@@ -183,6 +184,7 @@ Modelled on Claude Code's own feedback tool. When a call fails in a way that is
183
184
  | Tool | Endpoint | What it does |
184
185
  |------|----------|--------------|
185
186
  | `reddit_feedback_send` | `POST /feedback` | `action: "draft"` (default) queues a report locally and sends nothing; `"list"` shows the queue; `"send"` posts only the drafts you name; `"discard"` drops them. |
187
+ | `reddit_account_me` | `GET /account/me` | How much credit this key has left, before spending any. Free, never metered. |
186
188
  | `reddit_feedback_get` | `GET /feedback/{id}` | Read a sent report's status (`new`, `triaged`, `shipped`, `declined`) and the team's response. |
187
189
 
188
190
  ## Usage examples
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "redditapis-mcp",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "mcpName": "io.github.redditapis/redditapis-mcp",
5
- "description": "Official MCP server for redditapis.com, the Reddit API (subreddit listings, post + comment + community + user + media search, comment trees, top posts, user profiles) plus monitor/webhook management (create/list/update/remove a monitor, register/test/delete a webhook, read delivery history) and user-reviewed product feedback to the team as native tools for Claude, Cursor, and any MCP client.",
5
+ "description": "Official MCP server for redditapis.com. Search Reddit posts, comments, communities, users and media; read subreddits, comment trees, top posts and profiles; create and manage monitors and webhooks. Native tools for Claude, Cursor and any MCP client.",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/redditapis/redditapis-mcp.git"
package/src/tools.js CHANGED
@@ -290,6 +290,21 @@ export const TOOLS = [
290
290
  sort_type: z.enum(["score", "num_comments", "created"]).optional().describe("Re-sort the filtered page (descending) by this field."),
291
291
  },
292
292
  },
293
+ {
294
+ name: "reddit_post_visibility",
295
+ path: "/api/reddit/post/:id/visibility",
296
+ description:
297
+ "Is a post still publicly visible, or did it quietly stop being so? A removed Reddit post still " +
298
+ "returns when you fetch it by id, so asking the post does not answer this. This fetches the post " +
299
+ "and then one page of its author's submitted listing and compares them. Returns a verdict of live, " +
300
+ "not_visible or undecidable, a plain-language reason, and a confident flag. It deliberately never " +
301
+ "says WHY a post is not visible: a moderator removal, an admin removal, a spam filter and an author " +
302
+ "who has hidden their history are indistinguishable from outside. undecidable is a real answer, not " +
303
+ "a failure. Two upstream calls, billed as one $0.004 dual read.",
304
+ shape: {
305
+ id: z.string().min(1).describe("Reddit post id, base36, with or without the t3_ prefix"),
306
+ },
307
+ },
293
308
  {
294
309
  name: "reddit_post_comments",
295
310
  path: "/api/reddit/comments",
@@ -762,6 +777,26 @@ export const TOOLS = [
762
777
  ),
763
778
  },
764
779
  },
780
+ {
781
+ // CHECK BEFORE YOU SPEND. An agent planning a costed run has no way to ask
782
+ // how much credit is left, so it either runs blind and hits a 402 partway
783
+ // through, or it asks the user to go and look. Both are avoidable: the
784
+ // endpoint already exists and is already free.
785
+ //
786
+ // GET /account/me is mounted OUTSIDE /api (server.js), ahead of bearerAuth,
787
+ // under a comment reading "Free account endpoints live in apps/backend". So
788
+ // this tool bills nothing and is safe to call before every plan.
789
+ //
790
+ // Path verified against the live origin rather than read off the route
791
+ // tree: /account/me returns 401 unauthenticated while /account/<nonsense>
792
+ // returns 404, which is how we know the route exists. (/api/<anything>
793
+ // returns 401 for everything, so that path could not have told us.)
794
+ name: "reddit_account_me",
795
+ path: "/account/me",
796
+ description:
797
+ "How much credit this API key has left, before spending any. Returns the account's remaining credit balance and usage totals. FREE: this call is not metered and never costs a credit, so call it whenever you are about to run something expensive rather than guessing. Use it to decide whether a planned batch fits in the remaining balance, and to tell the user how much is left if a call returns 402. A 402 from any other tool means the balance is exhausted; its response carries a top-up URL to give the user.",
798
+ shape: {},
799
+ },
765
800
  {
766
801
  name: "reddit_feedback_get",
767
802
  path: "/feedback/{id}",