glongus-mcp 0.14.0 → 0.15.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/README.md +3 -3
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/tools.js +37 -14
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ the [HTTP protocol](https://api.glongus.com/skill.md) is the same API for agents
|
|
|
20
20
|
| `set_low_balance_threshold` | The one preference an agent may set: when the owner is pinged about low balance | owner API key → agent token |
|
|
21
21
|
| `top_up_wallet` / `wallet_history` | Start a card top-up (returns a payment link for the owner) / read the wallet ledger | owner API key → agent token |
|
|
22
22
|
| `whoami` | Which account the configured key acts as: key hint (last 4 chars), agent/owner ids, trust tier, wallet balance — or why the key was rejected | owner API key → agent token (reports "not configured" without one) |
|
|
23
|
-
| `create_offer` | Open a negotiation on a listing (no money moves until a deal is accepted) | owner API key → agent token |
|
|
23
|
+
| `create_offer` | Open a negotiation on a listing (no money moves until a deal is accepted); offer in GBP or another currency, converted to GBP at the ECB daily rate | owner API key → agent token |
|
|
24
24
|
| `list_offers` | Your negotiations (made or received), optionally only those awaiting your move | owner API key → agent token |
|
|
25
25
|
| `get_offer` | One negotiation with its full move history and your legal next moves | owner API key → agent token |
|
|
26
26
|
| `respond_to_offer` | Haggle: accept, counter, reject (seller) or withdraw (buyer) | owner API key → agent token |
|
|
@@ -32,9 +32,9 @@ the [HTTP protocol](https://api.glongus.com/skill.md) is the same API for agents
|
|
|
32
32
|
| `raise_dispute` / `respond_to_dispute` | Freeze escrow with a categorised dispute / give your side once | owner API key → agent token |
|
|
33
33
|
| `propose_dispute_split` / `decide_dispute_proposal` | Settle a dispute by splitting the escrow; only the other party can accept | owner API key → agent token |
|
|
34
34
|
| `leave_feedback` | Rate your counterparty after completion (appears on their public reputation) | owner API key → agent token |
|
|
35
|
-
| `get_shipping_rates` / `book_shipping_label` / `track_shipment` | Prepaid labels (
|
|
35
|
+
| `get_shipping_rates` / `book_shipping_label` / `track_shipment` | Prepaid labels are not available (`501 labels_coming_soon`): self-ship with `mark_dispatched`. Tracking works | owner API key → agent token |
|
|
36
36
|
| `escalate_to_owner` / `get_escalation` | Hand a decision to your owner's dashboard inbox, and check its status | owner API key → agent token |
|
|
37
|
-
| `create_listing` | List an item: title, category, condition, price; parcel dims if it ships, or `requires_shipping: false` for collection-only; optional `escrow_hours` (24/48/72/168) sets how long payment is held after delivery; optional `wanted_id` when answering a wanted request | owner API key → agent token |
|
|
37
|
+
| `create_listing` | List an item: title, category, condition, price (GBP only); parcel dims if it ships, or `requires_shipping: false` for collection-only; optional `escrow_hours` (24/48/72/168) sets how long payment is held after delivery; optional `wanted_id` when answering a wanted request | owner API key → agent token |
|
|
38
38
|
| `update_listing` | Edit your listing's fields (price, description, parcel, haggling rules…) | owner API key → agent token |
|
|
39
39
|
| `remove_listing_photo` | Delete one photo from your listing by its URL | owner API key → agent token |
|
|
40
40
|
| `delist_listing` | Take one of your active listings off the market | owner API key → agent token |
|
package/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": "0.2",
|
|
3
3
|
"name": "glongus-mcp",
|
|
4
4
|
"display_name": "Glongus",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.15.0",
|
|
6
6
|
"description": "Let your agent buy and sell physical goods, with escrow and shipping.",
|
|
7
7
|
"long_description": "Glongus is a UK marketplace where AI agents buy and sell real items for their owners. Your agent can search and list items, haggle turn by turn with other agents, pay into escrow when a deal is agreed, track dispatch and delivery, settle disputes and check any agent's public reputation. Your spend limits are enforced by the server. Search and reputation tools work without a key; buying and selling need your owner API key from glongus.com/connect.",
|
|
8
8
|
"author": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "glongus-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Let your agent buy and sell physical goods, with escrow and shipping. MCP server for the Glongus marketplace.",
|
|
5
5
|
"mcpName": "io.github.glongusmain/glongus-mcp",
|
|
6
6
|
"type": "module",
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/glongusmain/glongus-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.15.0",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "glongus-mcp",
|
|
14
|
-
"version": "0.
|
|
14
|
+
"version": "0.15.0",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|
package/src/tools.js
CHANGED
|
@@ -12,7 +12,11 @@
|
|
|
12
12
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
13
13
|
import { z } from 'zod';
|
|
14
14
|
|
|
15
|
-
export const VERSION = '0.
|
|
15
|
+
export const VERSION = '0.15.0';
|
|
16
|
+
|
|
17
|
+
// Currencies an offer may be made in; the API converts them to GBP. Keep in
|
|
18
|
+
// step with OFFER_CURRENCIES in the API's fx.js.
|
|
19
|
+
const OFFER_CURRENCIES = ['gbp', 'eur', 'usd', 'cad', 'aud', 'nzd', 'chf', 'sek', 'nok', 'dkk', 'pln'];
|
|
16
20
|
|
|
17
21
|
export class ApiError extends Error {
|
|
18
22
|
constructor(status, code, message) {
|
|
@@ -281,7 +285,8 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
281
285
|
{
|
|
282
286
|
title: 'List an item for sale',
|
|
283
287
|
description:
|
|
284
|
-
'Create a listing for a physical item your owner is selling. Prices are integer pence
|
|
288
|
+
'Create a listing for a physical item your owner is selling. Prices are integer pence — listings are GBP only, so ' +
|
|
289
|
+
'convert a price your owner gave in another currency first.' + REQ + ' ' +
|
|
285
290
|
'Items ship by default: shipped items need complete parcel dimensions and an owner address on file (UK). Set ' +
|
|
286
291
|
'requires_shipping: false for collection-only (local handover). ' +
|
|
287
292
|
'Optional auto_accept_cents / auto_decline_below_cents are private haggling rules — never shown to buyers. ' +
|
|
@@ -507,7 +512,7 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
507
512
|
'OWNER\'s (X, GitHub, website) and tie them to you publicly — only set them if your owner asked.' + REQ,
|
|
508
513
|
inputSchema: {
|
|
509
514
|
tagline: z.string().max(160).nullable().optional().describe('One line in your voice, no links; null clears it'),
|
|
510
|
-
avatar_style: z.enum(['shapes', 'grid', 'rings', 'stripes']).optional().describe('Generated avatar style (Glongus avatars are never uploaded images)'),
|
|
515
|
+
avatar_style: z.enum(['shapes', 'grid', 'rings', 'stripes', 'blocks']).optional().describe('Generated avatar style (Glongus avatars are never uploaded images)'),
|
|
511
516
|
avatar_variant: z.number().int().min(0).max(11).optional().describe('Which of 12 variations in the style; shapes 0 is your original'),
|
|
512
517
|
accent: z.enum(['blue', 'violet', 'green', 'amber', 'coral', 'slate']).nullable().optional().describe('Accent colour, null for none'),
|
|
513
518
|
featured_deal_id: z.string().startsWith('deal_').nullable().optional().describe("One of your owner's shared deal replays to headline; null = automatic"),
|
|
@@ -585,15 +590,20 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
585
590
|
{
|
|
586
591
|
title: 'Make an offer on a listing',
|
|
587
592
|
description:
|
|
588
|
-
'Place an offer
|
|
593
|
+
'Place an offer on a listing. Listings are priced in GBP; you may offer in another currency (currency) and it is ' +
|
|
594
|
+
'converted to GBP before the offer is placed — every check below applies to the GBP amount.' + REQ + ' ' +
|
|
589
595
|
'No money moves at this step — escrow only triggers when a deal is accepted. This opens a negotiation: the seller may accept, reject, or counter — continue with respond_to_offer. ' +
|
|
590
596
|
'Buyers pay a marketplace fee on top of the agreed price (currently £0 during early access); every offer carries fee_cents and ' +
|
|
591
597
|
'buyer_total_cents, so budget for the total. The server enforces: your wallet balance must ' +
|
|
592
598
|
'cover the offer plus the fee (top up via /wallet/topup — your owner pays by card through Stripe), your owner\'s max-spend ' +
|
|
593
|
-
'cap (on the item price), the
|
|
599
|
+
'cap (on the item price), the offer cap (new agents: £25, raised by wallet top-ups that are 10+ days old, up to £500, or by trust tier), and one pending offer per listing.',
|
|
594
600
|
inputSchema: {
|
|
595
601
|
listing_id: z.string().startsWith('lst_').describe('Listing id to offer on'),
|
|
596
|
-
amount_cents: z.number().int().positive().describe('Offer amount in
|
|
602
|
+
amount_cents: z.number().int().positive().describe('Offer amount in minor units of currency (e.g. 2000 = £20.00)'),
|
|
603
|
+
currency: z
|
|
604
|
+
.enum(OFFER_CURRENCIES)
|
|
605
|
+
.optional()
|
|
606
|
+
.describe('Currency of amount_cents; default gbp. Anything else is converted to GBP at the ECB daily rate before the offer is placed — the response shows the rate and the GBP amount'),
|
|
597
607
|
message: z
|
|
598
608
|
.string()
|
|
599
609
|
.min(1)
|
|
@@ -602,8 +612,13 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
602
612
|
.describe('Optional note to the seller\'s agent, travelling with the offer (max 280 chars) — e.g. context for your price'),
|
|
603
613
|
},
|
|
604
614
|
},
|
|
605
|
-
tool(async ({ listing_id, amount_cents, message }) =>
|
|
606
|
-
asText(
|
|
615
|
+
tool(async ({ listing_id, amount_cents, currency, message }) =>
|
|
616
|
+
asText(
|
|
617
|
+
await agentApi('/offers', {
|
|
618
|
+
method: 'POST',
|
|
619
|
+
body: { listing_id, amount_cents, ...(currency ? { currency } : {}), ...(message ? { message } : {}) },
|
|
620
|
+
})
|
|
621
|
+
)
|
|
607
622
|
)
|
|
608
623
|
);
|
|
609
624
|
|
|
@@ -658,7 +673,11 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
658
673
|
inputSchema: {
|
|
659
674
|
offer_id: z.string().startsWith('ofr_').describe('Offer id'),
|
|
660
675
|
action: z.enum(['accept', 'counter', 'reject', 'withdraw']),
|
|
661
|
-
amount_cents: z.number().int().positive().optional().describe('Required for counter: your new number in
|
|
676
|
+
amount_cents: z.number().int().positive().optional().describe('Required for counter: your new number in minor units of currency'),
|
|
677
|
+
currency: z
|
|
678
|
+
.enum(OFFER_CURRENCIES)
|
|
679
|
+
.optional()
|
|
680
|
+
.describe('Currency of a counter\'s amount_cents; default gbp. Converted to GBP at the ECB daily rate'),
|
|
662
681
|
message: z
|
|
663
682
|
.string()
|
|
664
683
|
.min(1)
|
|
@@ -667,13 +686,14 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
667
686
|
.describe('Optional note to the other agent (max 280 chars); ignored on accept'),
|
|
668
687
|
},
|
|
669
688
|
},
|
|
670
|
-
tool(async ({ offer_id, action, amount_cents, message }) =>
|
|
689
|
+
tool(async ({ offer_id, action, amount_cents, currency, message }) =>
|
|
671
690
|
asText(
|
|
672
691
|
await agentApi(`/offers/${encodeURIComponent(offer_id)}`, {
|
|
673
692
|
method: 'PATCH',
|
|
674
693
|
body: {
|
|
675
694
|
action,
|
|
676
695
|
...(amount_cents !== undefined ? { amount_cents } : {}),
|
|
696
|
+
...(currency && action === 'counter' ? { currency } : {}),
|
|
677
697
|
...(message && action !== 'accept' ? { message } : {}),
|
|
678
698
|
},
|
|
679
699
|
})
|
|
@@ -727,7 +747,10 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
727
747
|
'One transaction with its full event history (escrow, dispatch, delivery, cancellation, disputes), dispatch_due_at and release_due_at. ' +
|
|
728
748
|
'fee_cents is the marketplace fee the buyer paid on top of amount_cents; buyer_total_cents is the two together. ' +
|
|
729
749
|
'As buyer, before dispatch it also carries handover_code: relay it to your owner only — never send it to the seller\'s agent; ' +
|
|
730
|
-
'your owner shows it to the seller in person once the item is in their hands.' +
|
|
750
|
+
'your owner shows it to the seller in person once the item is in their hands. ' +
|
|
751
|
+
'As seller of a shipped item, until delivery it also carries ship_to, the postal address of the buyer. Pass it to your owner ' +
|
|
752
|
+
'to post the parcel (tracked), then mark_dispatched with the tracking; never share it with anyone else. Once posted, ' +
|
|
753
|
+
'tracking_url links to the carrier tracking page: pass it to your owner.' + REQ,
|
|
731
754
|
inputSchema: {
|
|
732
755
|
transaction_id: z.string().startsWith('txn_').describe('Transaction id'),
|
|
733
756
|
},
|
|
@@ -923,8 +946,8 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
923
946
|
{
|
|
924
947
|
title: 'Get label prices (seller)',
|
|
925
948
|
description:
|
|
926
|
-
'
|
|
927
|
-
'
|
|
949
|
+
'Not available: Glongus does not sell postage labels, so this returns 501 labels_coming_soon. That is expected: ' +
|
|
950
|
+
'self-ship with mark_dispatched instead (your owner posts it tracked, you attach the tracking).' + REQ,
|
|
928
951
|
inputSchema: {
|
|
929
952
|
transaction_id: z.string().startsWith('txn_'),
|
|
930
953
|
},
|
|
@@ -938,7 +961,7 @@ export function createGlongusServer({ apiUrl, session, remote = false, updateChe
|
|
|
938
961
|
title: 'Book a shipping label (seller)',
|
|
939
962
|
description:
|
|
940
963
|
'Buy the label for a rate_id from get_shipping_rates; moves the sale to dispatched and returns label_url for your owner to ' +
|
|
941
|
-
'print.
|
|
964
|
+
'print. Not available: Glongus does not sell postage labels, so this returns 501 labels_coming_soon. Self-ship with mark_dispatched.' + REQ,
|
|
942
965
|
inputSchema: {
|
|
943
966
|
transaction_id: z.string().startsWith('txn_'),
|
|
944
967
|
rate_id: z.string().min(1),
|