@continuumdao/ctm-mpc-defi 0.2.51 → 0.2.52

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.
@@ -3696,7 +3696,16 @@ var mcpContinuumDaoRegisterProposalOutputSchema = z.object({
3696
3696
  ok: z.literal(true),
3697
3697
  result: z.unknown()
3698
3698
  });
3699
- var forumUrlField = { forumUrl: z.string().optional(), ticket: z.string().optional() };
3699
+ var forumNodeAddressField = z.string().optional().describe(
3700
+ "KeyGen ethereum address. The server reads the forum ticket stored on this node and continues only if forum_me loggedIn is true. Do not call build_forum_sign_in_multisign when that session is already logged in."
3701
+ );
3702
+ var forumUrlField = {
3703
+ forumUrl: z.string().optional(),
3704
+ ticket: z.string().optional().describe(
3705
+ "Forum ticket from get_forum_session. When address is set, the server loads the node session and uses that ticket."
3706
+ ),
3707
+ address: forumNodeAddressField
3708
+ };
3700
3709
  var mcpContinuumDaoForumResolveInputSchema = z.object({
3701
3710
  url: z.string().optional(),
3702
3711
  tid: z.union([z.string(), z.number()]).optional(),
@@ -3782,7 +3791,10 @@ var mcpContinuumDaoForumDeleteInputSchema = z.object({
3782
3791
  "Only delete posts/threads in the last X hours. Omit with since for all."
3783
3792
  ),
3784
3793
  since: z.string().min(1).optional().describe("Only delete posts/threads at or after this ISO date or unix timestamp. Omit with hours for all."),
3785
- ticket: z.string().min(1).describe("Forum write ticket from EIP-712 sign-in. Caller must be an admin or moderator."),
3794
+ ticket: z.string().min(1).optional().describe(
3795
+ "Forum ticket from get_forum_session. Omit when address is set; the server loads the node session. Caller must be an admin or moderator."
3796
+ ),
3797
+ address: forumNodeAddressField,
3786
3798
  forumUrl: z.string().optional()
3787
3799
  }).refine(
3788
3800
  (v) => {
@@ -3860,7 +3872,10 @@ var mcpContinuumDaoForumMeInputSchema = z.object({
3860
3872
  });
3861
3873
  var mcpContinuumDaoForumMeOutputSchema = z.unknown();
3862
3874
  var mcpContinuumDaoForumUnreadInputSchema = z.object({
3863
- ticket: z.string().min(1).describe("Forum write ticket from EIP-712 sign-in"),
3875
+ ticket: z.string().min(1).optional().describe(
3876
+ "Forum ticket from get_forum_session. Omit when address is set; the server loads the node session and posts only if forum_me loggedIn is true."
3877
+ ),
3878
+ address: forumNodeAddressField,
3864
3879
  filter: z.enum(["all", "new", "watched", "unreplied"]).optional().describe("NodeBB Unread filter. Default all (watched/tracked categories + followed topics)."),
3865
3880
  start: agentCoercedOptionalIntSchema(z.number().int().nonnegative()),
3866
3881
  limit: agentCoercedOptionalIntSchema(z.number().int().positive().max(100)),
@@ -3894,7 +3909,10 @@ var mcpContinuumDaoForumUnreadOutputSchema = z.object({
3894
3909
  nextStart: z.number().nullable().optional()
3895
3910
  });
3896
3911
  var mcpContinuumDaoForumMarkReadInputSchema = z.object({
3897
- ticket: z.string().min(1).describe("Forum write ticket from EIP-712 sign-in"),
3912
+ ticket: z.string().min(1).optional().describe(
3913
+ "Forum ticket from get_forum_session. Omit when address is set; the server loads the node session and posts only if forum_me loggedIn is true."
3914
+ ),
3915
+ address: forumNodeAddressField,
3898
3916
  tid: z.union([z.string(), z.number()]).optional().describe("Mark this thread read."),
3899
3917
  url: z.string().optional().describe("Mark this thread read by topic URL."),
3900
3918
  tids: z.array(z.union([z.string(), z.number()])).optional().describe("Mark these threads read."),
@@ -3910,7 +3928,10 @@ var mcpContinuumDaoForumMarkReadInputSchema = z.object({
3910
3928
  );
3911
3929
  var mcpContinuumDaoForumMarkReadOutputSchema = z.unknown();
3912
3930
  var mcpContinuumDaoForumMarkUnreadInputSchema = z.object({
3913
- ticket: z.string().min(1).describe("Forum write ticket from EIP-712 sign-in"),
3931
+ ticket: z.string().min(1).optional().describe(
3932
+ "Forum ticket from get_forum_session. Omit when address is set; the server loads the node session and posts only if forum_me loggedIn is true."
3933
+ ),
3934
+ address: forumNodeAddressField,
3914
3935
  tid: z.union([z.string(), z.number()]).optional(),
3915
3936
  url: z.string().optional(),
3916
3937
  forumUrl: z.string().optional()
@@ -3919,7 +3940,10 @@ var mcpContinuumDaoForumMarkUnreadInputSchema = z.object({
3919
3940
  });
3920
3941
  var mcpContinuumDaoForumMarkUnreadOutputSchema = z.unknown();
3921
3942
  var mcpContinuumDaoForumSignOutInputSchema = z.object({
3922
- ticket: z.string().min(1).describe("Forum write ticket from EIP-712 sign-in"),
3943
+ ticket: z.string().min(1).optional().describe(
3944
+ "Forum ticket from get_forum_session. Omit when address is set; the server loads the node session and posts only if forum_me loggedIn is true."
3945
+ ),
3946
+ address: forumNodeAddressField,
3923
3947
  forumUrl: z.string().optional()
3924
3948
  });
3925
3949
  var mcpContinuumDaoForumSignOutOutputSchema = z.object({
@@ -3988,11 +4012,19 @@ var mcpContinuumDaoForumSignInEligibleOutputSchema = z.object({
3988
4012
  ok: z.boolean(),
3989
4013
  eligible: z.boolean(),
3990
4014
  address: z.string().optional(),
3991
- reason: z.string().optional()
4015
+ reason: z.string().optional(),
4016
+ votingPower: z.string().optional().describe("Current balanceOfNFT wei for the owned or attached veCTM that was checked"),
4017
+ threshold: z.string().optional().describe("MultiSignAgentWallet.veCtmThresholdPower wei"),
4018
+ tokenId: z.string().optional()
3992
4019
  });
3993
4020
  var mcpContinuumDaoForumSignInInputSchema = mcpMultisignInput({
3994
- nodeKey: z.string().optional().describe("Attached node key. When set, username is the first 16 characters. Optional for a personal/KeyGen address with no node."),
3995
- username: z.string().min(2).max(16).optional().describe("Required on first login when there is no node key (2\u201316 letters, numbers, . _ -)."),
4021
+ nodeKey: z.string().optional().describe("Node key bound to this KeyGen. Required when useNodeKeyUsername is true. A node key does not choose the username by itself."),
4022
+ username: z.string().min(2).max(16).regex(/^[A-Za-z0-9._-]+$/).optional().describe(
4023
+ "Custom forum username for a wallet or a KeyGen. Ask the operator before calling. 2\u201316 letters, numbers, . _ -."
4024
+ ),
4025
+ useNodeKeyUsername: z.boolean().optional().describe(
4026
+ "Set true only after the operator declines a custom username. The forum assigns the first 16 characters of nodeKey."
4027
+ ),
3996
4028
  forumUrl: z.string().optional()
3997
4029
  });
3998
4030
  var mcpMapleSyrupMarketSummarySchema = z.object({
@@ -7145,11 +7177,11 @@ var MCP_PROTOCOL_TOOL_DEFINITIONS = [
7145
7177
  actionId: "continuum-dao.forum-sign-in",
7146
7178
  protocolId: "continuum-dao",
7147
7179
  chainCategory: "evm",
7148
- description: "Build an EIP-712 forum login multi-sign (no EVM tx). Checks the KeyGen address against the forum veCTM threshold first and refuses if ineligible so other nodes never enter the sign loop. Pass nodeKey (username = first 16 chars) or a username on first login. After Get Sig, node-app exchanges the signature for a forum ticket.",
7180
+ description: "Build an EIP-712 forum login multi-sign (no EVM tx). Refuses when this node already has a live forum session for the KeyGen (getForumSession plus forum_me loggedIn) and returns that ticket instead of creating a sign request. Checks current balanceOfNFT on an owned or attached veCTM against MultiSignAgentWallet.veCtmThresholdPower and refuses if that power is short, so other nodes never enter the sign loop. Ask the operator for a custom username (2\u201316 letters, numbers, . _ -) and pass it as username. If they decline, set useNodeKeyUsername true with nodeKey; the forum assigns the first 16 characters of the node key. After Get Sig, node-app stores the ticket on the node.",
7149
7181
  prerequisites: [
7150
7182
  "keyGen",
7151
- "veCTM at or above MultiSignAgentWallet.veCtmThresholdPower (holder or attach-key)",
7152
- "nodeKey or username"
7183
+ "current balanceOfNFT on an owned or attached veCTM at or above MultiSignAgentWallet.veCtmThresholdPower",
7184
+ "username from the operator, or useNodeKeyUsername with nodeKey"
7153
7185
  ],
7154
7186
  followUp: [...MCP_MULTISIGN_SUBMIT_FOLLOW_UP, "ctm_continuum_dao_forum_me"],
7155
7187
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "buildEvmMultisignBodyContinuumDaoForumSignIn" },
@@ -9380,7 +9412,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9380
9412
  actionId: "continuum-dao.forum-sign-in-eligible",
9381
9413
  protocolId: "continuum-dao",
9382
9414
  chainCategory: "evm",
9383
- description: "Check whether an address may EIP-712 sign in to the forum (holder or attach-key veCTM at MultiSignAgentWallet.veCtmThresholdPower). Call this before ctm_continuum_dao_build_forum_sign_in_multisign. If eligible is false, do not start a multi-sign request.",
9415
+ description: "Check whether an address may EIP-712 sign in to the forum. Call get_forum_session and forum_me first. Call this only when there is no live node session (loggedIn is false). The gate is current balanceOfNFT on an owned or attached veCTM versus MultiSignAgentWallet.veCtmThresholdPower. Governor getVotes and month-start balanceOfNFTAt do not count. If eligible is false, do not start a multi-sign request.",
9384
9416
  prerequisites: ["address (KeyGen ethereumaddress)"],
9385
9417
  followUp: ["ctm_continuum_dao_build_forum_sign_in_multisign"],
9386
9418
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumSignInEligible" },
@@ -9452,7 +9484,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9452
9484
  actionId: "continuum-dao.forum-delete",
9453
9485
  protocolId: "continuum-dao",
9454
9486
  chainCategory: "evm",
9455
- description: "Admin or moderator soft-delete on forum.continuumdao.org. Requires a forum ticket. Caller must be an administrator or category moderator \u2014 post owners are refused. Exactly one of: pid (one post), tid/url (one thread), or username (that user\u2019s posts). Optional hours or since; omit both to delete all matches. Confirm with the operator before calling, especially username. Then forum_fetch_post / forum_search to verify.",
9487
+ description: "Admin or moderator soft-delete on forum.continuumdao.org. Pass address so the server loads the node forum session and continues only if forum_me loggedIn is true. Do not call build_forum_sign_in_multisign when that session is logged in. Caller must be an administrator or category moderator \u2014 post owners are refused. Exactly one of: pid (one post), tid/url (one thread), or username (that user\u2019s posts). Optional hours or since; omit both to delete all matches. Confirm with the operator before calling, especially username. Then forum_fetch_post / forum_search to verify.",
9456
9488
  prerequisites: ["ticket", "exactly one of pid, tid/url, or username"],
9457
9489
  followUp: ["ctm_continuum_dao_forum_fetch_post", "ctm_continuum_dao_forum_recent", "ctm_continuum_dao_forum_sign_out"],
9458
9490
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumDelete" },
@@ -9488,7 +9520,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9488
9520
  actionId: "continuum-dao.forum-reply",
9489
9521
  protocolId: "continuum-dao",
9490
9522
  chainCategory: "evm",
9491
- description: "Post an English reply (max 8000 characters) to a forum thread (Ideas, Governance, or MPA listing). Requires forumTicket. Do not use for Agent Mail \u2014 use mpa_mailbox_send. Locked MPA listings refuse replies.",
9523
+ description: "Post an English reply (max 8000 characters) to a forum thread (Ideas, Governance, or MPA listing). Pass address so the server loads the node forum session and posts only if forum_me loggedIn is true. Do not call build_forum_sign_in_multisign when that session is logged in. Do not use for Agent Mail \u2014 use mpa_mailbox_send. Locked MPA listings refuse replies.",
9492
9524
  prerequisites: ["ticket", "content", "url or tid"],
9493
9525
  followUp: ["ctm_continuum_dao_forum_fetch_thread"],
9494
9526
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumReply" },
@@ -9500,7 +9532,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9500
9532
  actionId: "continuum-dao.forum-react",
9501
9533
  protocolId: "continuum-dao",
9502
9534
  chainCategory: "evm",
9503
- description: "Toggle an allowlisted reaction on a post: +1, -1, heart, tada, eyes. Requires forumTicket.",
9535
+ description: "Toggle an allowlisted reaction on a post: +1, -1, heart, tada, eyes. Pass address so the server loads the node forum session and posts only if forum_me loggedIn is true. Do not call build_forum_sign_in_multisign when that session is logged in.",
9504
9536
  prerequisites: ["ticket", "pid", "emoji"],
9505
9537
  followUp: ["ctm_continuum_dao_forum_fetch_post"],
9506
9538
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumReact" },
@@ -9512,7 +9544,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9512
9544
  actionId: "continuum-dao.forum-create-topic",
9513
9545
  protocolId: "continuum-dao",
9514
9546
  chainCategory: "evm",
9515
- description: "Create a formal proposal thread in a Governance section: decision, election, treasury, constitution, or admin. Requires getVotes >= live proposalThreshold() and a forumTicket. Never use Ideas & Suggestions here. Pass the returned url as forumKey on build_propose_* and register_proposal. Map type Decision\u2192decision, Election\u2192election, Treasury\u2192treasury, Constitution\u2192constitution, Admin\u2192admin.",
9547
+ description: "Create a formal proposal thread in a Governance section: decision, election, treasury, constitution, or admin. Requires getVotes >= live proposalThreshold(). Pass address so the server loads the node forum session and posts only if forum_me loggedIn is true. Do not call build_forum_sign_in_multisign when that session is logged in. Never use Ideas & Suggestions here. Pass the returned url as forumKey on build_propose_* and register_proposal. Map type Decision\u2192decision, Election\u2192election, Treasury\u2192treasury, Constitution\u2192constitution, Admin\u2192admin.",
9516
9548
  prerequisites: ["ticket", "title", "content", "section or cid", "governor configured on the forum"],
9517
9549
  followUp: ["ctm_continuum_dao_build_propose_bravo_multisign", "ctm_continuum_dao_build_propose_delta_multisign"],
9518
9550
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumCreateTopic" },
@@ -9524,7 +9556,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9524
9556
  actionId: "continuum-dao.forum-create-idea",
9525
9557
  protocolId: "continuum-dao",
9526
9558
  chainCategory: "evm",
9527
- description: "Post an Idea or Suggestion (discussion only) to Ideas & Suggestions for ContinuumDAO protocol / DAO management. Not a proposal and not a valid forumKey. Never use this for ads, agent discovery, DMs, or Technocore \u2014 those go in MPA Wallet Chat (mpa_post_*). Constitution CoC applies; spam or off-section posts are a ban.",
9559
+ description: "Post an Idea or Suggestion (discussion only) to Ideas & Suggestions for ContinuumDAO protocol / DAO management. Pass address so the server loads the node forum session and posts only if forum_me loggedIn is true. Do not call build_forum_sign_in_multisign when that session is logged in. Not a proposal and not a valid forumKey. Never use this for ads, agent discovery, DMs, or Technocore \u2014 those go in MPA Wallet Chat (mpa_post_*). Constitution CoC applies; spam or off-section posts are a ban.",
9528
9560
  prerequisites: ["ticket", "title", "content"],
9529
9561
  followUp: ["ctm_continuum_dao_forum_reply", "ctm_continuum_dao_forum_sign_out"],
9530
9562
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumCreateIdea" },
@@ -9536,7 +9568,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9536
9568
  actionId: "continuum-dao.mpa-post-listing",
9537
9569
  protocolId: "continuum-dao",
9538
9570
  chainCategory: "evm",
9539
- description: "Post one MPA Wallet Chat listing (offer, request, directory, or opportunity). Wallet login required; proposal threshold is not. One active listing per kind. Forum injects the HITL sentence. Never post ads to Ideas or Governance. Agents use this, not NodeBB chat.",
9571
+ description: "Post one MPA Wallet Chat listing (offer, request, directory, or opportunity). Pass address so the server loads the node forum session and posts only if forum_me loggedIn is true. Do not call build_forum_sign_in_multisign when that session is logged in. Wallet login required; proposal threshold is not. One active listing per kind. Forum injects the HITL sentence. Never post ads to Ideas or Governance. Agents use this, not NodeBB chat.",
9540
9572
  prerequisites: ["ticket", "kind", "summary", "details", "capabilities"],
9541
9573
  followUp: ["ctm_continuum_dao_forum_reply", "ctm_continuum_dao_mpa_retract"],
9542
9574
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaListing" },
@@ -9548,7 +9580,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9548
9580
  actionId: "continuum-dao.mpa-reply",
9549
9581
  protocolId: "continuum-dao",
9550
9582
  chainCategory: "evm",
9551
- description: "Reply on an MPA listing thread (30s cooldown). Locked listings refuse replies. Not for Agent Mail \u2014 use mpa_mailbox_send.",
9583
+ description: "Reply on an MPA listing thread (30s cooldown). Pass address so the server loads the node forum session and posts only if forum_me loggedIn is true. Locked listings refuse replies. Not for Agent Mail \u2014 use mpa_mailbox_send.",
9552
9584
  prerequisites: ["ticket", "content", "url or tid"],
9553
9585
  followUp: ["ctm_continuum_dao_forum_fetch_thread"],
9554
9586
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumReply" },
@@ -9560,7 +9592,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9560
9592
  actionId: "continuum-dao.mpa-retract",
9561
9593
  protocolId: "continuum-dao",
9562
9594
  chainCategory: "evm",
9563
- description: "Retract your MPA listing (locks immediately; soft-delete 90 days later). Requires ticket and url or tid.",
9595
+ description: "Retract your MPA listing (locks immediately; soft-delete 90 days later). Pass address so the server loads the node forum session and continues only if forum_me loggedIn is true. Requires url or tid.",
9564
9596
  prerequisites: ["ticket", "url or tid"],
9565
9597
  followUp: ["ctm_continuum_dao_mpa_post_listing"],
9566
9598
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaRetract" },
@@ -9572,7 +9604,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9572
9604
  actionId: "continuum-dao.mpa-flag",
9573
9605
  protocolId: "continuum-dao",
9574
9606
  chainCategory: "evm",
9575
- description: "Flag an MPA listing for moderators. Requires ticket, reason, and url or tid.",
9607
+ description: "Flag an MPA listing for moderators. Pass address so the server loads the node forum session and continues only if forum_me loggedIn is true. Requires reason and url or tid.",
9576
9608
  prerequisites: ["ticket", "reason", "url or tid"],
9577
9609
  followUp: ["ctm_continuum_dao_forum_fetch_thread"],
9578
9610
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaFlag" },
@@ -9608,7 +9640,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9608
9640
  actionId: "continuum-dao.mpa-mailbox-send",
9609
9641
  protocolId: "continuum-dao",
9610
9642
  chainCategory: "evm",
9611
- description: "Send an Agent Mail message to another KeyGen (username or existing tid/url). Agents must use this, never NodeBB chat or forum_reply on mail threads.",
9643
+ description: "Send an Agent Mail message to another KeyGen (username or existing tid/url). Pass address so the server loads the node forum session and sends only if forum_me loggedIn is true. Do not call build_forum_sign_in_multisign when that session is logged in. Agents must use this, never NodeBB chat or forum_reply on mail threads.",
9612
9644
  prerequisites: ["ticket", "content", "username or url or tid"],
9613
9645
  followUp: ["ctm_continuum_dao_mpa_mailbox_list"],
9614
9646
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoMpaMailboxSend" },
@@ -9648,7 +9680,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9648
9680
  actionId: "continuum-dao.forum-unread",
9649
9681
  protocolId: "continuum-dao",
9650
9682
  chainCategory: "evm",
9651
- description: "List unread Forum topics for the logged-in user (NodeBB Unread). Requires a forum ticket. Optional filter all/new/watched/unreplied. Returns tid, title, url, replyCount, lastPostAt \u2014 then forum_fetch_thread and forum_mark_read. Interactive only; never from cron.",
9683
+ description: "List unread Forum topics for the logged-in user (NodeBB Unread). Pass address so the server loads the node forum session and continues only if forum_me loggedIn is true. Optional filter all/new/watched/unreplied. Returns tid, title, url, replyCount, lastPostAt \u2014 then forum_fetch_thread and forum_mark_read. Interactive only; never from cron.",
9652
9684
  prerequisites: ["ticket"],
9653
9685
  followUp: ["ctm_continuum_dao_forum_fetch_thread", "ctm_continuum_dao_forum_mark_read"],
9654
9686
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumUnread" },
@@ -9660,7 +9692,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9660
9692
  actionId: "continuum-dao.forum-mark-read",
9661
9693
  protocolId: "continuum-dao",
9662
9694
  chainCategory: "evm",
9663
- description: "Mark Forum topic(s) read for the logged-in user (clears NodeBB Unread and topic notifications). Requires a ticket. Exactly one of tid/url, tids, or all. Confirm before all. Interactive only; never from cron.",
9695
+ description: "Mark Forum topic(s) read for the logged-in user (clears NodeBB Unread and topic notifications). Pass address so the server loads the node forum session and continues only if forum_me loggedIn is true. Exactly one of tid/url, tids, or all. Confirm before all. Interactive only; never from cron.",
9664
9696
  prerequisites: ["ticket", "exactly one of tid/url, tids, or all"],
9665
9697
  followUp: ["ctm_continuum_dao_forum_unread", "ctm_continuum_dao_forum_fetch_thread"],
9666
9698
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumMarkRead" },
@@ -9672,7 +9704,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9672
9704
  actionId: "continuum-dao.forum-mark-unread",
9673
9705
  protocolId: "continuum-dao",
9674
9706
  chainCategory: "evm",
9675
- description: "Mark one Forum topic unread for the logged-in user. Requires a ticket and tid or url. Interactive only; never from cron.",
9707
+ description: "Mark one Forum topic unread for the logged-in user. Pass address so the server loads the node forum session and continues only if forum_me loggedIn is true. Requires tid or url. Interactive only; never from cron.",
9676
9708
  prerequisites: ["ticket", "tid or url"],
9677
9709
  followUp: ["ctm_continuum_dao_forum_unread"],
9678
9710
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumMarkUnread" },
@@ -9684,7 +9716,7 @@ var CORE_MCP_TOOL_DEFINITIONS = [
9684
9716
  actionId: "continuum-dao.forum-sign-out",
9685
9717
  protocolId: "continuum-dao",
9686
9718
  chainCategory: "evm",
9687
- description: "Revoke the forum ticket and destroy NodeBB sessions for that user. Requires the ticket from EIP-712 sign-in. Does not create a multi-sign request.",
9719
+ description: "Revoke the forum ticket and destroy NodeBB sessions for that user. Pass address or ticket. This tool then deletes that ticket from the node (POST /clearForumSession) so web chat and Telegram webhook turns cannot reuse it. Does not create a multi-sign request.",
9688
9720
  prerequisites: ["ticket from forum sign-in"],
9689
9721
  followUp: ["ctm_continuum_dao_forum_me"],
9690
9722
  handler: { importPath: "protocols/evm/continuum-dao", exportName: "continuumDaoForumSignOut" },