prospectapis-mcp 0.4.3 → 0.9.0

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
@@ -6,6 +6,65 @@ All notable changes to `prospectapis-mcp` are documented here. The format follow
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.0] - 2026-11-01
10
+
11
+ ### Added
12
+
13
+ - `page_profile` (`GET /v1/pages/profile`, $0.012 per live read): read a company page's public fields fresh at request
14
+ time (name, website, description, industry, company type, employee count and size range, headquarters, founded year,
15
+ specialities, follower count, affiliated pages) by its public name or page address. Billed under the same
16
+ `people_reads` go-live switch as the other live reads, default off.
17
+
18
+ ### Changed
19
+
20
+ - `company_get` also takes a company's exact name in `domain`. A name shared by several companies answers HTTP 300
21
+ with each `{name, domain}` to choose from, free; a name we hold no rounds for is a free 404.
22
+
23
+ ## [0.8.0] - 2026-10-31
24
+
25
+ ### Added
26
+
27
+ - `post_resharers` (`GET /v1/posts/resharers`, $0.012 per live read): read who reshared a public post, each resharer
28
+ enriched, with the reshare type (`repost` for a plain reshare or `repost_with_thoughts` for a quote) and the added
29
+ `commentary` text of a with-thoughts reshare (roadmap PA-3.2). No competitor exposes reshare-with-commentary intent.
30
+ Whether a call is billed is gated server-side by the `people_reads` go-live switch, default off. The underlying read
31
+ ships UNVERIFIED (its reshares recipe is pending a live capture), so the tool answers temporarily unavailable until an
32
+ operator enables it on the server.
33
+
34
+ ## [0.7.0] - 2026-10-31
35
+
36
+ ### Added
37
+
38
+ - Twelve tools for the people/post WRITE product and the messaging reads (roadmap PA-3.4, task #46, backlog #18), each
39
+ acting on your own connected account. Writes, one published price PER route, metered, no floor, no seat:
40
+ `message_send` (`POST /v1/messages`, $0.03), `person_invite` (`POST /v1/people/invite`, $0.03), `invite_withdraw`
41
+ (`POST /v1/people/invite/withdraw`, $0.01), `person_follow` (`POST /v1/people/follow`, $0.01), `person_visit`
42
+ (`POST /v1/people/visit`, $0.01), `post_create` (`POST /v1/posts`, $0.05), `post_react` (`POST /v1/posts/react`,
43
+ $0.005), `post_comment` (`POST /v1/posts/comment`, $0.02), `post_repost` (`POST /v1/posts/repost`, $0.01) and
44
+ `post_quote` (`POST /v1/posts/quote`, $0.02). Messaging reads at $0.01 per read: `messages_list` (`GET /v1/messages`)
45
+ and `message_thread` (`GET /v1/messages/thread`). Whether a call is billed is gated server-side by each family's
46
+ go-live switch; until it is on, the routes answer as before and are free. Connecting your own account stays free.
47
+
48
+ ## [0.6.0] - 2026-10-31
49
+
50
+ ### Added
51
+
52
+ - Two tools for the cited company profile endpoint (roadmap PA-2.1a): `company_get` (`GET /v1/companies/:domain`,
53
+ $0.02 per company returned; a building 202 or an unknown 404 is free) and `company_funding`
54
+ (`GET /v1/companies/:domain/funding`, $0.009 per funding record returned). Billing of the profile is gated
55
+ server-side by the company go-live switch.
56
+
57
+ ## [0.5.0] - 2026-10-31
58
+
59
+ ### Added
60
+
61
+ - Five live-read tools for the people and page reads (roadmap PA-3.2), one published price of $0.012 per live read,
62
+ each fetching the person or page fresh at request time: `people_profile` (`GET /v1/people/profile`), `people_search`
63
+ (`POST /v1/people/search`), `people_posts` (`GET /v1/people/posts`), `post_engagers` (`GET /v1/posts/engagers`) and
64
+ `page_followers` (`GET /v1/pages/followers`). All read-only and billed per call (not idempotent, like the funding
65
+ reads). Whether a call is billed is gated server-side by the API's go-live switch; until it is on, the reads answer
66
+ as before and are free.
67
+
9
68
  ## [0.4.3] - 2026-10-31
10
69
 
11
70
  ### Changed
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # prospectapis-mcp
2
2
 
3
- prospectapis-mcp is the MCP server for ProspectAPIs (https://prospectapis.com), for sales and prospecting teams and the AI agents they run in Claude Code, Claude Desktop, Cursor and other MCP clients. It gives your agent twenty-five tools over the ProspectAPIs API: search funding rounds by date, round, amount, company, investor and country, get new matching rounds pushed to your webhook, verify, find and bulk-check email addresses, report what bounced, and order a cited research brief on any company or person. Funding records carry the public announcement URL when there is one. Every account starts with a free $1 balance and no card: records cost $0.009, an email check $0.003 and a completed brief $0.15, with no seats and no subscription. It needs Node.js 22 or later.
3
+ prospectapis-mcp is the MCP server for ProspectAPIs (https://prospectapis.com), for sales and prospecting teams and the AI agents they run in Claude Code, Claude Desktop, Cursor and other MCP clients. It gives your agent 46 tools over the ProspectAPIs API: search and watch funding rounds, read cited company profiles, verify, find and bulk-check email addresses, order a cited research brief, read people and pages live, and act through your own connected account (message, invite, follow, post, react, comment and more). Every account starts with a free $1 balance and no card: records cost $0.009, an email check $0.003, a brief $0.15, a live read $0.012 and an action from $0.005, with no seats and no subscription. It needs Node.js 22 or later.
4
4
 
5
5
  Install (Claude Code): `claude mcp add prospectapis -e PROSPECTAPIS_API_KEY=pa_live_... -- npx -y prospectapis-mcp`
6
6
 
@@ -12,6 +12,8 @@ Website: https://prospectapis.com/mcp
12
12
  |---|---|---|
13
13
  | `funding_search` | `GET /v1/funding` | $0.009 per record returned; no match is free |
14
14
  | `funding_get` | `GET /v1/funding/:id` | $0.009 when found; a missing id is free |
15
+ | `company_get` | `GET /v1/companies/:domain` | $0.02 per company returned; a building (202) or unknown (404) domain is free |
16
+ | `company_funding` | `GET /v1/companies/:domain/funding` | $0.009 per record returned; a company with no rounds is free |
15
17
  | `research_submit` | `POST /v1/research` | one research at `research_price_usd` (see `account_balance`), charged only when the brief completes; refunded on failure |
16
18
  | `research_get` | `GET /v1/research/:id` | free; poll until `status` is `completed` or `failed` |
17
19
  | `email_verify` | `POST /v1/email/verify` | $0.003 per `valid` or `invalid` result; `catch-all` and `unknown` are free; 1 to 25 addresses a call |
@@ -21,6 +23,25 @@ Website: https://prospectapis.com/mcp
21
23
  | `email_verify_job_get` | `GET /v1/email/verify/jobs/:id` | free |
22
24
  | `email_verify_job_results` | `GET /v1/email/verify/jobs/:id/results` | free; 1,000 a page |
23
25
  | `watchlist_create`, `watchlist_list`, `watchlist_get`, `watchlist_deliveries`, `watchlist_test`, `watchlist_delete` | `/v1/watchlists` | free to manage; a delivered event costs one record, only when your webhook answers 2xx |
26
+ | `people_profile` | `GET /v1/people/profile` | $0.012 per live read; a profile that cannot be read is free |
27
+ | `people_search` | `POST /v1/people/search` | $0.012 per live read; up to 1,000 results a query |
28
+ | `people_posts` | `GET /v1/people/posts` | $0.012 per live read |
29
+ | `post_engagers` | `GET /v1/posts/engagers` | $0.012 per live read |
30
+ | `post_resharers` | `GET /v1/posts/resharers` | $0.012 per live read; names the reshare type and the with-thoughts commentary |
31
+ | `page_followers` | `GET /v1/pages/followers` | $0.012 per live read; your connected account must administer the page |
32
+ | `page_profile` | `GET /v1/pages/profile` | $0.012 per live read; a page that cannot be read is free |
33
+ | `message_send` | `POST /v1/messages` | $0.03 per action; on your connected account |
34
+ | `person_invite` | `POST /v1/people/invite` | $0.03 per action |
35
+ | `invite_withdraw` | `POST /v1/people/invite/withdraw` | $0.01 per action |
36
+ | `person_follow` | `POST /v1/people/follow` | $0.01 per action |
37
+ | `person_visit` | `POST /v1/people/visit` | $0.01 per action |
38
+ | `post_create` | `POST /v1/posts` | $0.05 per action |
39
+ | `post_react` | `POST /v1/posts/react` | $0.005 per action |
40
+ | `post_comment` | `POST /v1/posts/comment` | $0.02 per action |
41
+ | `post_repost` | `POST /v1/posts/repost` | $0.01 per action |
42
+ | `post_quote` | `POST /v1/posts/quote` | $0.02 per action |
43
+ | `messages_list` | `GET /v1/messages` | $0.01 per read; your connected-account conversations |
44
+ | `message_thread` | `GET /v1/messages/thread` | $0.01 per read |
24
45
  | `account_balance` | `GET /v1/account` | free |
25
46
  | `feedback_send` | `POST /v1/feedback` | free; reports a bug, wrong field or missing capability to the team (10 an hour per key) |
26
47
  | `pricing_get` | `GET /pricing` | free, no key needed; the live price list |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prospectapis-mcp",
3
- "version": "0.4.3",
3
+ "version": "0.9.0",
4
4
  "mcpName": "com.prospectapis/prospectapis-mcp",
5
5
  "description": "MCP server for ProspectAPIs: search funding rounds, verify email addresses, run paid prospect research briefs, manage funding watchlists, read your balance and the live price list.",
6
6
  "type": "module",
package/src/server.js CHANGED
@@ -31,6 +31,7 @@ export const INSTRUCTIONS =
31
31
  export function hintFor(status) {
32
32
  if (status === 401) return " (missing or invalid API key: set PROSPECTAPIS_API_KEY to a key from the dashboard)";
33
33
  if (status === 402) return ` (out of credits for this call; the body says what it costs: top up at ${TOP_UP_URL})`;
34
+ if (status === 300) return " (several companies have that name: repeat the call with one of the listed domains)";
34
35
  if (status === 400) return " (an argument was rejected: the body says which one)";
35
36
  if (status === 404) return " (not found: the id may be wrong, or the record is not published)";
36
37
  if (status === 429) return " (rate limited: wait a few seconds and retry)";
package/src/tools.js CHANGED
@@ -79,6 +79,46 @@ export const TOOLS = [
79
79
  id: z.string().uuid().describe("The funding record id from a `funding_search` result."),
80
80
  },
81
81
  },
82
+ {
83
+ name: "company_get",
84
+ method: "GET",
85
+ path: "/v1/companies/{domain}",
86
+ title: "Get Company Profile",
87
+ write: false,
88
+ description:
89
+ "Read one cited company profile by domain or by company name: name, description, HQ, founded year, industry, employee band, social " +
90
+ "links, a funding rollup (the amount raised across the rounds we hold, not lifetime total raised) and a careers " +
91
+ "link, with a source URL on every field and each marked `stated` (a page " +
92
+ "states it) or `inferred` (classified from a page); a field no source supports is null, never guessed. Costs " +
93
+ "$0.02 per company returned, drawn from your balance. A domain not built yet returns 202 `building` (retry in " +
94
+ "about 30 seconds), and a domain that does not resolve to a company returns 404; both are free. A company name " +
95
+ "is matched whole against the funding rounds we hold: several companies with that name answer HTTP 300 with each " +
96
+ "`{name, domain}` to choose from (free, never a guess), and no company with that name is a free 404.",
97
+ shape: {
98
+ domain: z.string().min(2).max(253).describe("The company's domain, for example `acme.com`, or its exact name, for example `Acme Robotics`."),
99
+ },
100
+ },
101
+ {
102
+ name: "company_funding",
103
+ method: "GET",
104
+ path: "/v1/companies/{domain}/funding",
105
+ title: "Get Company Funding Rounds",
106
+ write: false,
107
+ format: { min_amount_usd: formatAmount, max_amount_usd: formatAmount },
108
+ description:
109
+ "The funding rounds for one company domain, newest announcement first: the same records as funding_search filtered " +
110
+ "to this domain. Costs $0.009 per record returned; a company with no rounds is free. Page with `cursor`.",
111
+ shape: {
112
+ domain: z.string().min(3).max(253).describe("The company's domain, for example `acme.com`."),
113
+ since: DATE.describe("Earliest announcement date, inclusive (YYYY-MM-DD)."),
114
+ until: DATE.describe("Latest announcement date, inclusive (YYYY-MM-DD)."),
115
+ round: z.string().optional().describe("Comma-separated round stages, for example `seed,series_a`."),
116
+ min_amount_usd: AMOUNT.describe("Smallest round size in USD."),
117
+ max_amount_usd: AMOUNT.describe("Largest round size in USD."),
118
+ limit: z.number().int().min(1).max(100).optional().describe("Records per page, 1 to 100 (default 25). Each record returned is billed."),
119
+ cursor: z.string().max(200).optional().describe("Opaque cursor from the previous page's `next_cursor`."),
120
+ },
121
+ },
82
122
  {
83
123
  name: "research_submit",
84
124
  method: "POST",
@@ -375,6 +415,321 @@ export const TOOLS = [
375
415
  description: "Delete a funding-signal alert and its delivery history. Free.",
376
416
  shape: { id: z.string().uuid().describe("The watchlist id.") },
377
417
  },
418
+ {
419
+ name: "people_profile",
420
+ method: "GET",
421
+ path: "/v1/people/profile",
422
+ title: "Read Person Profile",
423
+ write: false,
424
+ description:
425
+ "Read one person's public professional profile, fetched FRESH at request time (never from a stored cache). " +
426
+ "Costs $0.012 per live read, drawn from your balance; a profile that cannot be read is free. Pass a public " +
427
+ "identifier or profile address as `profile_ref`.",
428
+ shape: {
429
+ profile_ref: z.string().min(1).max(300).describe("A person's public identifier or profile address."),
430
+ },
431
+ },
432
+ {
433
+ name: "people_search",
434
+ method: "POST",
435
+ path: "/v1/people/search",
436
+ title: "Search People",
437
+ write: false,
438
+ body: true,
439
+ description:
440
+ "Search people by keywords and filters, read FRESH at request time. Returns the first 1,000 results per query; " +
441
+ "page with `start`. Costs $0.012 per live read. Give `keywords` or at least one filter.",
442
+ shape: {
443
+ keywords: z.string().min(1).max(500).optional().describe("Free-text keywords."),
444
+ filters: z
445
+ .object({
446
+ network: z.string().optional(),
447
+ current_company: z.string().optional(),
448
+ past_company: z.string().optional(),
449
+ location: z.string().optional(),
450
+ industry: z.string().optional(),
451
+ school: z.string().optional(),
452
+ profile_language: z.string().optional(),
453
+ connection_of: z.string().optional(),
454
+ service_category: z.string().optional(),
455
+ first_name: z.string().optional(),
456
+ last_name: z.string().optional(),
457
+ title: z.string().optional(),
458
+ company: z.string().optional(),
459
+ school_name: z.string().optional(),
460
+ })
461
+ .partial()
462
+ .optional()
463
+ .describe("Named filters: network, current_company, past_company, location, industry, school, profile_language, connection_of, service_category, first_name, last_name, title, company, school_name."),
464
+ start: z.number().int().min(0).max(999).optional().describe("Zero-based offset into the first 1,000 results."),
465
+ count: z.number().int().min(1).max(50).optional().describe("Results per page, 1 to 50."),
466
+ },
467
+ },
468
+ {
469
+ name: "people_posts",
470
+ method: "GET",
471
+ path: "/v1/people/posts",
472
+ title: "Read Person Posts",
473
+ write: false,
474
+ description:
475
+ "Read a person's recent public posts, FRESH at request time. Costs $0.012 per live read. Page with `cursor` " +
476
+ "(pass back the returned cursor) or `start`.",
477
+ shape: {
478
+ person_ref: z.string().min(1).max(4000).describe("The person reference from a profile or search result."),
479
+ start: z.number().int().min(0).max(10000).optional().describe("Zero-based offset."),
480
+ count: z.number().int().min(1).max(50).optional().describe("Posts per page, 1 to 50."),
481
+ cursor: z.string().max(4000).optional().describe("Opaque cursor from the previous page."),
482
+ },
483
+ },
484
+ {
485
+ name: "post_engagers",
486
+ method: "GET",
487
+ path: "/v1/posts/engagers",
488
+ title: "Read Post Engagers",
489
+ write: false,
490
+ description:
491
+ "Read who reacted to or commented on a public post, FRESH at request time. Costs $0.012 per live read. Set " +
492
+ "`kind` to reactions or comments and give one of post_id, share_id or post_url.",
493
+ shape: {
494
+ kind: z.enum(["reactions", "comments"]).describe("reactions (who reacted) or comments (who commented)."),
495
+ post_id: z.string().min(1).max(4000).optional().describe("The post id."),
496
+ share_id: z.string().min(1).max(4000).optional().describe("The share id."),
497
+ post_url: z.string().min(1).max(2048).optional().describe("The public post URL."),
498
+ start: z.number().int().min(0).max(100000).optional().describe("Reactions only: zero-based offset."),
499
+ count: z.number().int().min(1).max(50).optional().describe("Results per page, 1 to 50."),
500
+ cursor: z.string().max(4000).optional().describe("Comments only: opaque cursor from the previous page."),
501
+ },
502
+ },
503
+ {
504
+ name: "post_resharers",
505
+ method: "GET",
506
+ path: "/v1/posts/resharers",
507
+ title: "Read Post Resharers",
508
+ write: false,
509
+ description:
510
+ "Read who reshared a public post, FRESH at request time, with each resharer enriched. Costs $0.012 per live " +
511
+ "read. Each result carries reshare_type (repost or repost_with_thoughts) and, for a with-thoughts reshare, the " +
512
+ "added commentary text. Give one of post_id, share_id or post_url.",
513
+ shape: {
514
+ post_id: z.string().min(1).max(4000).optional().describe("The post id."),
515
+ share_id: z.string().min(1).max(4000).optional().describe("The share id."),
516
+ post_url: z.string().min(1).max(2048).optional().describe("The public post URL."),
517
+ start: z.number().int().min(0).max(100000).optional().describe("Zero-based offset."),
518
+ count: z.number().int().min(1).max(50).optional().describe("Results per page, 1 to 50."),
519
+ },
520
+ },
521
+ {
522
+ name: "page_followers",
523
+ method: "GET",
524
+ path: "/v1/pages/followers",
525
+ title: "Read Page Followers",
526
+ write: false,
527
+ description:
528
+ "Read the followers of a page your connected account administers, FRESH at request time. Costs $0.012 per live " +
529
+ "read. Give `page`, or the `cursor` of the previous page. Requires a connected account (people_search aside, " +
530
+ "this read runs on your own account).",
531
+ shape: {
532
+ page: z.string().min(1).max(300).optional().describe("The page identifier or address."),
533
+ count: z.number().int().min(1).max(20).optional().describe("Followers per page, 1 to 20."),
534
+ cursor: z.string().max(4000).optional().describe("Opaque cursor from the previous page."),
535
+ },
536
+ },
537
+ {
538
+ name: "page_profile",
539
+ method: "GET",
540
+ path: "/v1/pages/profile",
541
+ title: "Read Company Page",
542
+ write: false,
543
+ description:
544
+ "Read a company page's public fields, FRESH at request time: name, website, tagline, description, industry, " +
545
+ "company type, employee count and size range, headquarters (city, region, country, postal code), founded year, " +
546
+ "specialities, follower count and affiliated pages. Costs $0.012 per live read; a page that cannot be read is " +
547
+ "free. Pass the page's public name or its page address as `page`.",
548
+ shape: {
549
+ page: z.string().min(1).max(300).describe("The company page's public name (the part after /company/) or its page address."),
550
+ },
551
+ },
552
+ {
553
+ name: "message_send",
554
+ method: "POST",
555
+ path: "/v1/messages",
556
+ title: "Send Direct Message",
557
+ write: true,
558
+ body: true,
559
+ description:
560
+ "Send a direct message from YOUR connected account. Costs $0.03 per action, drawn from your balance; billing " +
561
+ "turns on with the write go-live switch (free until then). Requires a connected account (accounts_connect).",
562
+ shape: {
563
+ person_ref: z.string().min(1).max(4000).describe("The person reference from a profile or search result."),
564
+ text: z.string().min(1).max(8000).describe("The message text."),
565
+ },
566
+ },
567
+ {
568
+ name: "person_invite",
569
+ method: "POST",
570
+ path: "/v1/people/invite",
571
+ title: "Send Connection Invite",
572
+ write: true,
573
+ body: true,
574
+ description: "Send a connection invite from your connected account. Costs $0.03 per action. Requires a connected account.",
575
+ shape: {
576
+ person_ref: z.string().min(1).max(4000).describe("The person reference from a profile or search result."),
577
+ },
578
+ },
579
+ {
580
+ name: "invite_withdraw",
581
+ method: "POST",
582
+ path: "/v1/people/invite/withdraw",
583
+ title: "Withdraw Connection Invite",
584
+ write: true,
585
+ body: true,
586
+ description: "Withdraw a connection invite you sent. Costs $0.01 per action. Requires a connected account.",
587
+ shape: {
588
+ person_ref: z.string().min(1).max(4000).describe("The person reference the invite was sent to."),
589
+ },
590
+ },
591
+ {
592
+ name: "person_follow",
593
+ method: "POST",
594
+ path: "/v1/people/follow",
595
+ title: "Follow or Unfollow a Person",
596
+ write: true,
597
+ body: true,
598
+ description: "Follow a person, or unfollow with `unfollow: true`. Costs $0.01 per action. Requires a connected account.",
599
+ shape: {
600
+ person_ref: z.string().min(1).max(4000).describe("The person reference from a profile or search result."),
601
+ unfollow: z.boolean().optional().describe("true to unfollow instead of follow."),
602
+ },
603
+ },
604
+ {
605
+ name: "person_visit",
606
+ method: "POST",
607
+ path: "/v1/people/visit",
608
+ title: "Visit a Profile",
609
+ write: true,
610
+ body: true,
611
+ description:
612
+ "Visit a profile from your connected account (the 'viewed you' signal). Costs $0.01 per action. Give person_ref " +
613
+ "or profile_ref. Requires a connected account.",
614
+ shape: {
615
+ person_ref: z.string().min(1).max(4000).optional().describe("The person reference from a profile or search result."),
616
+ profile_ref: z.string().min(1).max(300).optional().describe("A person's public identifier or profile address."),
617
+ },
618
+ },
619
+ {
620
+ name: "post_create",
621
+ method: "POST",
622
+ path: "/v1/posts",
623
+ title: "Create a Post",
624
+ write: true,
625
+ body: true,
626
+ description: "Create a post (share) from your connected account. Costs $0.05 per action. Requires a connected account.",
627
+ shape: {
628
+ text: z.string().min(1).max(3000).describe("The post text."),
629
+ visibility: z.enum(["anyone", "connections"]).optional().describe("Who can see it; defaults to anyone."),
630
+ },
631
+ },
632
+ {
633
+ name: "post_react",
634
+ method: "POST",
635
+ path: "/v1/posts/react",
636
+ title: "React to a Post",
637
+ write: true,
638
+ body: true,
639
+ description:
640
+ "React to a post, or remove your reaction with `remove: true`. Costs $0.005 per action. Give one of post_id, " +
641
+ "share_id or post_url. Requires a connected account.",
642
+ shape: {
643
+ post_id: z.string().min(1).max(4000).optional().describe("The post id."),
644
+ share_id: z.string().min(1).max(4000).optional().describe("The share id."),
645
+ post_url: z.string().min(1).max(2000).optional().describe("The public post URL."),
646
+ reaction: z.enum(["like", "celebrate", "support", "love", "insightful", "funny"]).optional().describe("The reaction; defaults to like."),
647
+ remove: z.boolean().optional().describe("true to remove your reaction instead."),
648
+ },
649
+ },
650
+ {
651
+ name: "post_comment",
652
+ method: "POST",
653
+ path: "/v1/posts/comment",
654
+ title: "Comment on a Post",
655
+ write: true,
656
+ body: true,
657
+ description:
658
+ "Comment on a post, or reply to a comment with `parent_comment`. Costs $0.02 per action. Give one of post_id, " +
659
+ "share_id or post_url. Requires a connected account.",
660
+ shape: {
661
+ text: z.string().min(1).max(3000).describe("The comment text."),
662
+ post_id: z.string().min(1).max(4000).optional().describe("The post id."),
663
+ share_id: z.string().min(1).max(4000).optional().describe("The share id."),
664
+ post_url: z.string().min(1).max(2000).optional().describe("The public post URL."),
665
+ parent_comment: z.string().min(1).max(4000).optional().describe("A comment reference to reply under."),
666
+ },
667
+ },
668
+ {
669
+ name: "post_repost",
670
+ method: "POST",
671
+ path: "/v1/posts/repost",
672
+ title: "Repost a Post",
673
+ write: true,
674
+ body: true,
675
+ description:
676
+ "Repost a post (instant repost, no commentary). Costs $0.01 per action. Give one of post_id, share_id or " +
677
+ "post_url. Requires a connected account.",
678
+ shape: {
679
+ post_id: z.string().min(1).max(4000).optional().describe("The post id."),
680
+ share_id: z.string().min(1).max(4000).optional().describe("The share id."),
681
+ post_url: z.string().min(1).max(2000).optional().describe("The public post URL."),
682
+ },
683
+ },
684
+ {
685
+ name: "post_quote",
686
+ method: "POST",
687
+ path: "/v1/posts/quote",
688
+ title: "Quote a Post",
689
+ write: true,
690
+ body: true,
691
+ description:
692
+ "Quote a post with your own thoughts (repost with commentary). Costs $0.02 per action. Give one of post_id, " +
693
+ "share_id or post_url. Requires a connected account.",
694
+ shape: {
695
+ text: z.string().min(1).max(3000).describe("Your commentary."),
696
+ post_id: z.string().min(1).max(4000).optional().describe("The post id."),
697
+ share_id: z.string().min(1).max(4000).optional().describe("The share id."),
698
+ post_url: z.string().min(1).max(2000).optional().describe("The public post URL."),
699
+ visibility: z.enum(["anyone", "connections"]).optional().describe("Who can see it; defaults to anyone."),
700
+ },
701
+ },
702
+ {
703
+ name: "messages_list",
704
+ method: "GET",
705
+ path: "/v1/messages",
706
+ title: "List Conversations",
707
+ write: false,
708
+ description:
709
+ "Read your connected account's recent conversations, incremental by `since`/`cursor`. Costs $0.01 per read; " +
710
+ "billing turns on with the messaging go-live switch (free until then). Requires a connected account.",
711
+ shape: {
712
+ since: z.string().min(1).max(4000).optional().describe("Read only what changed after this value from a previous read."),
713
+ cursor: z.string().min(1).max(4000).optional().describe("Opaque cursor from the previous page."),
714
+ count: z.number().int().min(1).max(20).optional().describe("Conversations per page, 1 to 20."),
715
+ },
716
+ },
717
+ {
718
+ name: "message_thread",
719
+ method: "GET",
720
+ path: "/v1/messages/thread",
721
+ title: "Read a Conversation Thread",
722
+ write: false,
723
+ description:
724
+ "Read the messages of one conversation thread, incremental by `since`/`cursor`. Costs $0.01 per read. Pass the " +
725
+ "`thread_id` from messages_list. Requires a connected account.",
726
+ shape: {
727
+ thread_id: z.string().min(1).max(4000).describe("The thread id from messages_list."),
728
+ since: z.string().min(1).max(4000).optional().describe("Read only what changed after this value from a previous read."),
729
+ cursor: z.string().min(1).max(4000).optional().describe("Opaque cursor from the previous page."),
730
+ count: z.number().int().min(1).max(50).optional().describe("Messages per page, 1 to 50."),
731
+ },
732
+ },
378
733
  {
379
734
  name: "account_balance",
380
735
  method: "GET",