@projectsolo/solo-mission-mcp 0.21.2 → 0.21.3
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/README.md +1 -1
- package/dist/index.js +8 -3
- package/package.json +2 -2
- package/src/tools/missions.ts +8 -3
- package/src/tools/solana.ts +7 -4
package/README.md
CHANGED
|
@@ -150,7 +150,7 @@ Restart the client. No build step or clone required — npx downloads and runs t
|
|
|
150
150
|
|
|
151
151
|
| Tool | Description |
|
|
152
152
|
|---|---|
|
|
153
|
-
| `create_mission` | Create a new mission (title ≤100 chars, description ≤2000 chars, **Markdown supported**; off-chain missions are always free — use `budget` for paid on-chain escrow) |
|
|
153
|
+
| `create_mission` | Create a new mission (title ≤100 chars, description ≤2000 chars, **Markdown supported**; off-chain missions are always free — use `budget` + `chain: 'solana'` for paid on-chain escrow. Base is closed to new creation during the Solana private beta migration — a budget-bearing request without `chain: 'solana'` now returns 503) |
|
|
154
154
|
| `list_missions` | List your agent's missions — supports `status`, `page`, `limit` |
|
|
155
155
|
| `get_mission` | Get details of a specific mission by ID |
|
|
156
156
|
| `complete_mission` | Mark a mission as completed |
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
var missionTools = [
|
|
19
19
|
{
|
|
20
20
|
name: "create_mission",
|
|
21
|
-
description: "Create a new mission. Off-chain missions (no budget field) are always free \u2014 no payment, no escrow. For paid missions
|
|
21
|
+
description: "Create a new mission. Off-chain missions (no budget field) are always free \u2014 no payment, no escrow. For paid missions, include the budget field AND chain: 'solana' \u2014 the response will contain funding_params for fund_solana_mission. Base (EscrowVault) on-chain missions are closed to new creation during the Solana private beta migration: any budget-bearing request that resolves to chain 'base' (including the pre-Solana default of omitting chain) now returns 503, not a created mission \u2014 always pass chain: 'solana' explicitly for a paid mission.",
|
|
22
22
|
inputSchema: {
|
|
23
23
|
type: "object",
|
|
24
24
|
properties: {
|
|
@@ -27,6 +27,11 @@ var missionTools = [
|
|
|
27
27
|
enum: ["coffee_chat", "opinion", "survey", "general", "media_review"],
|
|
28
28
|
description: 'Type of mission. Use "media_review" for audio/music rating missions.'
|
|
29
29
|
},
|
|
30
|
+
chain: {
|
|
31
|
+
type: "string",
|
|
32
|
+
enum: ["base", "solana"],
|
|
33
|
+
description: "Which chain escrows a paid (budget-bearing) mission. 'base' is currently closed to new creation and returns 503 \u2014 pass 'solana' for any on-chain mission. Ignored for off-chain missions (no budget field)."
|
|
34
|
+
},
|
|
30
35
|
title: { type: "string", description: "Mission title (max 100 chars)" },
|
|
31
36
|
description: { type: "string", description: "Detailed mission description (max 2000 chars). Supports Markdown \u2014 use ## headings, - bullet lists, and **bold** to structure your content. The platform renders it as formatted text." },
|
|
32
37
|
requirements: {
|
|
@@ -42,7 +47,7 @@ var missionTools = [
|
|
|
42
47
|
reward_usdt: { type: "number", minimum: 0, description: "Deprecated \u2014 ignored for off-chain missions (which are always free). Has no effect. Omit this field." },
|
|
43
48
|
max_participants: { type: "number", minimum: 1, description: "Maximum number of participants" },
|
|
44
49
|
expires_in_hours: { type: "number", minimum: 1, description: "Hours until mission expires" },
|
|
45
|
-
budget: { type: "number", description: "Total mission budget in USDC. Enables on-chain escrow. Must satisfy: base_reward * max_humans + lottery_prize_per_winner * lottery_winner_count <= budget." },
|
|
50
|
+
budget: { type: "number", description: "Total mission budget in USDC. Enables on-chain escrow \u2014 pair with chain: 'solana' (Base is closed to new creation, see chain). Must satisfy: base_reward * max_humans + lottery_prize_per_winner * lottery_winner_count <= budget." },
|
|
46
51
|
max_humans: { type: "number", minimum: 1, description: "On-chain: maximum number of participants (both base-reward and lottery entrants)." },
|
|
47
52
|
base_reward: { type: "number", minimum: 0, description: "Per-participant base reward in USDC paid to every qualified human. Defaults to 0. Set to 0 for pure-lottery missions." },
|
|
48
53
|
reward_per_human: { type: "number", minimum: 0, description: "Deprecated \u2014 use base_reward instead." },
|
|
@@ -84,7 +89,7 @@ var missionTools = [
|
|
|
84
89
|
},
|
|
85
90
|
{
|
|
86
91
|
name: "confirm_funding",
|
|
87
|
-
description: `After calling createTask() on the EscrowVault contract, confirm the funding via the SOLO API. The backend verifies the transaction on-chain. Mission transitions from pending_funding \u2192 active. tx_hash is optional \u2014 backend reconciles from the contract if omitted. For media_review missions: returns 409 if no tracks are confirmed yet \u2014 call add_mission_track first. Also returns 409 if the on-chain task's budget, lottery, deadline, or seed_commit values do not match what create_mission originally quoted (e.g. createTask() was called with hand-typed or re-derived values instead of the exact funding_params fields) \u2014 unlike the "not yet FUNDED" 409, this one is NOT retryable: the task_id can never be confirmed. Call cancelTask() on-chain to reclaim the full escrow, then call create_mission again.`,
|
|
92
|
+
description: `Base (EscrowVault) only \u2014 Solana missions use fund_solana_mission instead, which confirms as part of the same call. Base is currently closed to new mission creation, so this only applies to a Base mission created before that change. After calling createTask() on the EscrowVault contract, confirm the funding via the SOLO API. The backend verifies the transaction on-chain. Mission transitions from pending_funding \u2192 active. tx_hash is optional \u2014 backend reconciles from the contract if omitted. For media_review missions: returns 409 if no tracks are confirmed yet \u2014 call add_mission_track first. Also returns 409 if the on-chain task's budget, lottery, deadline, or seed_commit values do not match what create_mission originally quoted (e.g. createTask() was called with hand-typed or re-derived values instead of the exact funding_params fields) \u2014 unlike the "not yet FUNDED" 409, this one is NOT retryable: the task_id can never be confirmed. Call cancelTask() on-chain to reclaim the full escrow, then call create_mission again.`,
|
|
88
93
|
inputSchema: {
|
|
89
94
|
type: "object",
|
|
90
95
|
properties: {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@projectsolo/solo-mission-mcp",
|
|
3
|
-
"version": "0.21.
|
|
4
|
-
"description": "MCP server for Solo Mission Platform
|
|
3
|
+
"version": "0.21.3",
|
|
4
|
+
"description": "MCP server for Solo Mission Platform — lets AI agents create missions, browse humans, and chat.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"publishConfig": {
|
package/src/tools/missions.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { apiGet, apiPost } from '../api/client.js';
|
|
|
4
4
|
export const missionTools: Tool[] = [
|
|
5
5
|
{
|
|
6
6
|
name: 'create_mission',
|
|
7
|
-
description: 'Create a new mission. Off-chain missions (no budget field) are always free — no payment, no escrow. For paid missions
|
|
7
|
+
description: 'Create a new mission. Off-chain missions (no budget field) are always free — no payment, no escrow. For paid missions, include the budget field AND chain: \'solana\' — the response will contain funding_params for fund_solana_mission. Base (EscrowVault) on-chain missions are closed to new creation during the Solana private beta migration: any budget-bearing request that resolves to chain \'base\' (including the pre-Solana default of omitting chain) now returns 503, not a created mission — always pass chain: \'solana\' explicitly for a paid mission.',
|
|
8
8
|
inputSchema: {
|
|
9
9
|
type: 'object',
|
|
10
10
|
properties: {
|
|
@@ -13,6 +13,11 @@ export const missionTools: Tool[] = [
|
|
|
13
13
|
enum: ['coffee_chat', 'opinion', 'survey', 'general', 'media_review'],
|
|
14
14
|
description: 'Type of mission. Use "media_review" for audio/music rating missions.',
|
|
15
15
|
},
|
|
16
|
+
chain: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
enum: ['base', 'solana'],
|
|
19
|
+
description: 'Which chain escrows a paid (budget-bearing) mission. \'base\' is currently closed to new creation and returns 503 — pass \'solana\' for any on-chain mission. Ignored for off-chain missions (no budget field).',
|
|
20
|
+
},
|
|
16
21
|
title: { type: 'string', description: 'Mission title (max 100 chars)' },
|
|
17
22
|
description: { type: 'string', description: 'Detailed mission description (max 2000 chars). Supports Markdown — use ## headings, - bullet lists, and **bold** to structure your content. The platform renders it as formatted text.' },
|
|
18
23
|
requirements: {
|
|
@@ -28,7 +33,7 @@ export const missionTools: Tool[] = [
|
|
|
28
33
|
reward_usdt: { type: 'number', minimum: 0, description: 'Deprecated — ignored for off-chain missions (which are always free). Has no effect. Omit this field.' },
|
|
29
34
|
max_participants: { type: 'number', minimum: 1, description: 'Maximum number of participants' },
|
|
30
35
|
expires_in_hours: { type: 'number', minimum: 1, description: 'Hours until mission expires' },
|
|
31
|
-
budget: { type: 'number', description: 'Total mission budget in USDC. Enables on-chain escrow. Must satisfy: base_reward * max_humans + lottery_prize_per_winner * lottery_winner_count <= budget.' },
|
|
36
|
+
budget: { type: 'number', description: 'Total mission budget in USDC. Enables on-chain escrow — pair with chain: \'solana\' (Base is closed to new creation, see chain). Must satisfy: base_reward * max_humans + lottery_prize_per_winner * lottery_winner_count <= budget.' },
|
|
32
37
|
max_humans: { type: 'number', minimum: 1, description: 'On-chain: maximum number of participants (both base-reward and lottery entrants).' },
|
|
33
38
|
base_reward: { type: 'number', minimum: 0, description: 'Per-participant base reward in USDC paid to every qualified human. Defaults to 0. Set to 0 for pure-lottery missions.' },
|
|
34
39
|
reward_per_human: { type: 'number', minimum: 0, description: 'Deprecated — use base_reward instead.' },
|
|
@@ -70,7 +75,7 @@ export const missionTools: Tool[] = [
|
|
|
70
75
|
},
|
|
71
76
|
{
|
|
72
77
|
name: 'confirm_funding',
|
|
73
|
-
description: 'After calling createTask() on the EscrowVault contract, confirm the funding via the SOLO API. The backend verifies the transaction on-chain. Mission transitions from pending_funding → active. tx_hash is optional — backend reconciles from the contract if omitted. For media_review missions: returns 409 if no tracks are confirmed yet — call add_mission_track first. Also returns 409 if the on-chain task\'s budget, lottery, deadline, or seed_commit values do not match what create_mission originally quoted (e.g. createTask() was called with hand-typed or re-derived values instead of the exact funding_params fields) — unlike the "not yet FUNDED" 409, this one is NOT retryable: the task_id can never be confirmed. Call cancelTask() on-chain to reclaim the full escrow, then call create_mission again.',
|
|
78
|
+
description: 'Base (EscrowVault) only — Solana missions use fund_solana_mission instead, which confirms as part of the same call. Base is currently closed to new mission creation, so this only applies to a Base mission created before that change. After calling createTask() on the EscrowVault contract, confirm the funding via the SOLO API. The backend verifies the transaction on-chain. Mission transitions from pending_funding → active. tx_hash is optional — backend reconciles from the contract if omitted. For media_review missions: returns 409 if no tracks are confirmed yet — call add_mission_track first. Also returns 409 if the on-chain task\'s budget, lottery, deadline, or seed_commit values do not match what create_mission originally quoted (e.g. createTask() was called with hand-typed or re-derived values instead of the exact funding_params fields) — unlike the "not yet FUNDED" 409, this one is NOT retryable: the task_id can never be confirmed. Call cancelTask() on-chain to reclaim the full escrow, then call create_mission again.',
|
|
74
79
|
inputSchema: {
|
|
75
80
|
type: 'object',
|
|
76
81
|
properties: {
|
package/src/tools/solana.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Solana funding tools.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* a Base mission, and an agent that never
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Originally additive: every existing tool behaved identically, `create_mission` without `chain`
|
|
5
|
+
* still created a Base mission, and an agent that never touched Solana needed no wallet configured.
|
|
6
|
+
* That is no longer true as of the private-beta migration to Solana — the backend now returns 503
|
|
7
|
+
* for any on-chain mission that resolves to `chain: 'base'`, including the pre-Solana default of
|
|
8
|
+
* omitting `chain` entirely. An agent that wants a paid/on-chain mission must pass `chain: 'solana'`
|
|
9
|
+
* explicitly and configure a wallet; only free off-chain missions (no `budget`) work with no chain
|
|
10
|
+
* configuration at all. See create_mission's own description for the current, authoritative state.
|
|
8
11
|
*
|
|
9
12
|
* The funding flow is deliberately ONE tool, not three. Build → verify → sign → submit as separate
|
|
10
13
|
* calls would let an agent skip the verify step, and the verify step is what makes signing an opaque
|