-
Notifications
You must be signed in to change notification settings - Fork 40
feat: skill-mcp parity — new skills + cross-ref audit #243
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
whoabuddy
wants to merge
8
commits into
main
Choose a base branch
from
feat/skill-mcp-parity
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
37e30b1
feat(ordinals-marketplace): add ordinals-marketplace skill for Magic …
whoabuddy 3aaaf74
feat(yield-dashboard): add mcp-tools frontmatter linking to MCP serve…
whoabuddy c58b7bc
feat(wot): add consolidated wot skill merging nostr-wot and maximumsa…
whoabuddy 22bcc3c
deprecate(nostr-wot,maximumsats-wot): add deprecation notices pointin…
whoabuddy 7bfcddb
chore(manifest): regenerate skills.json adding wot skill entry
whoabuddy 971839e
feat(arxiv-research): add mcp-tools frontmatter linking to MCP server…
whoabuddy ddc4ff5
feat(skills): add mcp-tools frontmatter to 15 SKILL.md files
whoabuddy f56605c
chore(manifest): regenerate skills.json with updated mcp-tools entries
whoabuddy File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,81 @@ | ||
| --- | ||
| name: ordinals-marketplace-agent | ||
| skill: ordinals-marketplace | ||
| description: Agent instructions for BTC ordinals marketplace operations via Magic Eden — browse listings, list inscriptions for sale, buy, and cancel listings using the PSBT-based flow. | ||
| --- | ||
|
|
||
| # Ordinals Marketplace Agent | ||
|
|
||
| This agent handles BTC ordinals buying and selling on the Magic Eden marketplace (`api-mainnet.magiceden.dev/v2/ord/btc`). Operations use a PSBT-based flow: Magic Eden generates a transaction that the agent signs and then broadcasts. All operations are Bitcoin mainnet-only. | ||
|
|
||
| **BTC ordinals only.** This skill does not cover Solana or other chains. | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - Wallet must be unlocked for all write operations — use `wallet_unlock` first | ||
| - Active wallet must have Taproot (P2TR) addresses for listing and cancellation; SegWit (P2WPKH) address for funding purchases | ||
| - BTC balance required: purchase price + miner fee for buys; miner fee only for cancellations | ||
| - `ordinals_get_listings` requires no wallet — it is a public read operation | ||
| - Operations will fail on testnet; only invoke on mainnet | ||
|
|
||
| ## Decision Logic | ||
|
|
||
| | Goal | Tool | | ||
| |------|------| | ||
| | Browse active ordinals listings on Magic Eden | `ordinals_get_listings` — filter by collection, price range, or sort order | | ||
| | List an inscription for sale (step 1 of 2) | `ordinals_list_for_sale` — returns PSBT to sign | | ||
| | Finalize a listing after signing the PSBT (step 2 of 2) | `ordinals_list_for_sale_submit` — pass signed PSBT | | ||
| | Buy a listed inscription (get buyer PSBT) | `ordinals_buy` — returns PSBT to sign then broadcast | | ||
| | Cancel an active listing | `ordinals_cancel_listing` — returns cancellation PSBT to sign then broadcast | | ||
|
|
||
| ## Safety Checks | ||
|
|
||
| - Verify inscription ownership before listing: use `get_ordinal_utxos` or `get_inscriptions_by_address` to confirm the inscription is in the wallet's Taproot address | ||
| - Check BTC balance before buying: use `get_btc_balance` and compare against listing price plus estimated fee | ||
| - Do not use ordinal UTXOs as fee inputs in unrelated transactions while a listing is active — the listing PSBT references that specific UTXO | ||
| - Confirm the listing is still active before buying: `ordinals_get_listings` with the collection or check `ordinals_buy` response for `status: "not_listed"` | ||
| - For the cancel flow, the signed PSBT must be broadcast promptly — stale PSBTs may be rejected | ||
|
|
||
| ## Error Handling | ||
|
|
||
| | Error message | Cause | Fix | | ||
| |--------------|-------|-----| | ||
| | "Magic Eden ordinals marketplace is only available on mainnet." | Running on testnet | Switch to mainnet network config | | ||
| | "Wallet is not unlocked. Use wallet_unlock first." | Write operation without active session | Run `wallet_unlock` with password | | ||
| | "Taproot address not available. Unlock your wallet first." | Wallet session missing P2TR keys | Unlock a managed wallet (not env-var-based mnemonic) | | ||
| | "Bitcoin SegWit address not available. Unlock your wallet first." | SegWit keys missing | Same as above — unlock a managed wallet | | ||
| | "Magic Eden API 429: ..." | Rate limit exceeded | Wait and retry; set `MAGIC_EDEN_API_KEY` env var for higher limits | | ||
| | "Magic Eden API 400: ..." | Invalid inscription ID or missing listing | Verify inscription ID format (`txid...iN`) and that it is currently listed | | ||
| | "Inscription ... does not appear to be listed for sale" | Inscription not listed or delisted | Confirm listing via `ordinals_get_listings` with collection filter | | ||
| | "Magic Eden API 500: ..." | Magic Eden server error | Retry after a short wait | | ||
|
|
||
| ## Output Handling | ||
|
|
||
| - `ordinals_get_listings`: `listings` array contains inscription details and `listedPrice` in satoshis; use `inscriptionId` for subsequent buy/cancel operations | ||
| - `ordinals_list_for_sale`: extract `psbtBase64` and pass to `psbt_sign`; also save `inscriptionId` for the submit step | ||
| - `ordinals_list_for_sale_submit`: `status: "listed"` confirms the listing is live on Magic Eden | ||
| - `ordinals_buy`: extract `psbtBase64` and pass to `psbt_sign`, then pass signed result to `psbt_broadcast`; `priceSats` confirms the final purchase price | ||
| - `ordinals_cancel_listing`: extract `psbtBase64`, sign with `psbt_sign`, broadcast with `psbt_broadcast`; after confirmation the inscription is delisted | ||
|
|
||
| ## Example Invocations | ||
|
|
||
| ``` | ||
| # Browse recent listings for a collection | ||
| ordinals_get_listings({ collection: "nodemonkes", sortBy: "recentlyListed", limit: 20 }) | ||
|
|
||
| # List an inscription for 500,000 sats (step 1) | ||
| ordinals_list_for_sale({ inscriptionId: "abc123...i0", priceSats: 500000 }) | ||
| # → sign psbtBase64 with psbt_sign | ||
| # → submit signed PSBT (step 2) | ||
| ordinals_list_for_sale_submit({ inscriptionId: "abc123...i0", signedPsbt: "<signed-psbt-base64>" }) | ||
|
|
||
| # Buy a listed inscription | ||
| ordinals_buy({ inscriptionId: "abc123...i0" }) | ||
| # → sign psbtBase64 with psbt_sign | ||
| # → broadcast with psbt_broadcast | ||
|
|
||
| # Cancel an active listing | ||
| ordinals_cancel_listing({ inscriptionId: "abc123...i0" }) | ||
| # → sign psbtBase64 with psbt_sign | ||
| # → broadcast with psbt_broadcast | ||
| ``` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,139 @@ | ||
| --- | ||
| name: ordinals-marketplace | ||
| description: "BTC ordinals marketplace operations via Magic Eden — browse active listings, list inscriptions for sale via PSBT flow, submit signed listings, buy inscriptions, and cancel active listings. BTC ordinals only (not Solana). Mainnet-only." | ||
| metadata: | ||
| author: "whoabuddy" | ||
| author-agent: "Trustless Indra" | ||
| user-invocable: "false" | ||
| arguments: "get-listings | list-for-sale | list-for-sale-submit | buy | cancel-listing" | ||
| entry: "ordinals-marketplace/SKILL.md" | ||
| mcp-tools: "ordinals_get_listings, ordinals_list_for_sale, ordinals_list_for_sale_submit, ordinals_buy, ordinals_cancel_listing" | ||
| requires: "wallet" | ||
| tags: "l1, write, mainnet-only, requires-funds" | ||
| --- | ||
|
|
||
| # Ordinals Marketplace Skill | ||
|
|
||
| Browse and trade Bitcoin ordinals/inscriptions on the Magic Eden marketplace via the Magic Eden BTC ordinals API (`api-mainnet.magiceden.dev/v2/ord/btc`). | ||
|
|
||
| **Important:** This skill covers BTC ordinals only. Magic Eden operates separate marketplaces for different chains; this skill exclusively uses the Bitcoin ordinals API. All operations are mainnet-only — the API does not support testnet. | ||
|
|
||
| This is an MCP-tool skill. Agents invoke the underlying MCP tools directly rather than a standalone CLI script. Write operations use the Magic Eden PSBT-based listing flow: Magic Eden generates a PSBT which the seller or buyer signs and then broadcasts. | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - Wallet must be unlocked for all write operations (`list-for-sale`, `buy`, `cancel-listing`) | ||
| - `get-listings` is public and requires no wallet | ||
| - Active wallet must have Taproot keys (P2TR address) — managed wallets satisfy this | ||
| - BTC balance required for purchasing and cancellations (miner fee for cancel; purchase price + fee for buy) | ||
| - Set `MAGIC_EDEN_API_KEY` environment variable for a dedicated authenticated rate limit (optional but recommended for high-volume use; without it, the unauthenticated shared limit applies: 30 QPM) | ||
|
|
||
| ## Subcommands | ||
|
|
||
| ### get-listings | ||
|
|
||
| Browse active BTC ordinals listings on Magic Eden. No wallet required. | ||
|
|
||
| MCP tool: `ordinals_get_listings` | ||
|
|
||
| Options: | ||
| - `collection` (optional) — Magic Eden collection symbol to filter by (e.g. `nodemonkes`, `bitcoin-puppets`) | ||
| - `minPriceSats` (optional) — Minimum listing price in satoshis | ||
| - `maxPriceSats` (optional) — Maximum listing price in satoshis | ||
| - `limit` (optional) — Number of results (default 20, max 100) | ||
| - `offset` (optional) — Pagination offset (default 0) | ||
| - `sortBy` (optional) — `priceAsc`, `priceDesc`, or `recentlyListed` (default) | ||
|
|
||
| Returns active listings with inscription details, seller address, and price in satoshis. | ||
|
|
||
| ### list-for-sale | ||
|
|
||
| List a wallet inscription for sale on Magic Eden using the PSBT listing flow. Step 1 of 2. | ||
|
|
||
| MCP tool: `ordinals_list_for_sale` | ||
|
|
||
| Options: | ||
| - `inscriptionId` (required) — Inscription ID in txid+index format, e.g. `abc123...i0` | ||
| - `priceSats` (required) — Listing price in satoshis | ||
| - `receiverAddress` (optional) — BTC address to receive payment (defaults to wallet's Taproot address) | ||
|
|
||
| Returns a `psbtBase64` for signing. The inscription is not moved; the signed PSBT authorizes the sale to any buyer. | ||
|
|
||
| Next step: sign the returned PSBT using `psbt_sign`, then call `list-for-sale-submit`. | ||
|
|
||
| ### list-for-sale-submit | ||
|
|
||
| Submit a signed listing PSBT to Magic Eden to publish the listing. Step 2 of 2. | ||
|
|
||
| MCP tool: `ordinals_list_for_sale_submit` | ||
|
|
||
| Options: | ||
| - `inscriptionId` (required) — The inscription ID being listed | ||
| - `signedPsbt` (required) — The signed PSBT in base64 format (from `psbt_sign`) | ||
|
|
||
| Returns `{ "status": "listed" }` on success. | ||
|
|
||
| ### buy | ||
|
|
||
| Buy a listed BTC ordinal inscription from Magic Eden. Multi-step PSBT flow. | ||
|
|
||
| MCP tool: `ordinals_buy` | ||
|
|
||
| Options: | ||
| - `inscriptionId` (required) — Inscription ID to purchase, e.g. `abc123...i0` | ||
| - `buyerAddress` (optional) — BTC address to receive the inscription (defaults to wallet's Taproot address) | ||
| - `buyerPaymentAddress` (optional) — BTC address to fund the purchase (defaults to wallet's SegWit address) | ||
| - `feeRate` (optional) — Fee rate in sat/vB (uses `halfHourFee` network default if omitted) | ||
|
|
||
| Returns a `psbtBase64` combining the seller's listing and buyer's payment inputs. | ||
|
|
||
| Next step: sign the PSBT with `psbt_sign`, then broadcast with `psbt_broadcast`. | ||
|
|
||
| ### cancel-listing | ||
|
|
||
| Cancel an active Magic Eden listing for an inscription you own. | ||
|
|
||
| MCP tool: `ordinals_cancel_listing` | ||
|
|
||
| Options: | ||
| - `inscriptionId` (required) — Inscription ID of the active listing to cancel, e.g. `abc123...i0` | ||
| - `sellerAddress` (optional) — BTC Taproot address that owns the listing (defaults to wallet's Taproot address) | ||
|
|
||
| Returns a `psbtBase64` for the cancellation transaction. | ||
|
|
||
| Next step: sign the PSBT with `psbt_sign`, then broadcast with `psbt_broadcast` to finalize the cancellation. | ||
|
|
||
| ## Multi-Step Flows | ||
|
|
||
| ### Listing Flow | ||
|
|
||
| ``` | ||
| 1. ordinals_list_for_sale (get listing PSBT) | ||
| 2. psbt_sign (sign the psbtBase64) | ||
| 3. ordinals_list_for_sale_submit (publish listing) | ||
| ``` | ||
|
|
||
| ### Buy Flow | ||
|
|
||
| ``` | ||
| 1. ordinals_get_listings (find inscription and price) | ||
| 2. ordinals_buy (get buyer PSBT) | ||
| 3. psbt_sign (sign the psbtBase64) | ||
| 4. psbt_broadcast (broadcast to complete purchase) | ||
| ``` | ||
|
|
||
| ### Cancel Flow | ||
|
|
||
| ``` | ||
| 1. ordinals_cancel_listing (get cancellation PSBT) | ||
| 2. psbt_sign (sign the psbtBase64) | ||
| 3. psbt_broadcast (broadcast to cancel listing) | ||
| ``` | ||
|
|
||
| ## Notes | ||
|
|
||
| - All write operations require mainnet — the API returns an error on testnet | ||
| - Magic Eden's BTC ordinals API (`api-mainnet.magiceden.dev/v2/ord/btc`) is the backend for all operations | ||
| - The inscription must be in the wallet's Taproot (P2TR / bc1p...) address for listing and cancellation | ||
| - Payment for purchases comes from the SegWit (P2WPKH / bc1q...) address | ||
| - If `MAGIC_EDEN_API_KEY` is not set, the shared unauthenticated rate limit (30 QPM) applies |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ordinals/SKILL.mdnow lists child-inscription MCP tools (estimate_child_inscription_fee,inscribe_child,inscribe_child_reveal) undermetadata.mcp-tools, but this skill’s documented subcommands don’t cover child inscriptions and there is a dedicatedchild-inscriptionskill for those tools. Consider removing the child-inscription tools from this skill’smcp-toolslist (or explicitly documenting/adding arguments/subcommands ifordinalsis intended to cover them).