Kuaidi100 launched China's first MCP-protocol-compatible logistics information service platform. The core API services of Kuaidi100's Baidiy
MyDesigns is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Create print-on-demand products, publish them to your MyDesigns store, and track sales.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http mydesigns-mcp https://mcp.mydesigns.io/mcp
# 2 — ask your agent for something these tools do
# get_store_stats, list_store_domains, add_store_domain and 31 more
MyDesigns costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http mydesigns-mcp https://mcp.mydesigns.io/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
34 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Get a store's real performance over the last N days: orders, items sold, revenue, profit and fees in USD, visits, and its top products, each compared with the N days before. Fees are everything the sales cost the seller: making and shipping the products plus marketplace fees, so call them costs, not fees alone. Top products are ranked by net sales, then by page views; only products with tracked pa
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
| days | integer | no | How many days back to look, e.g. 7, 30 or 90. |
List a store's own domains (like shop.example.com): whether each is live, which one is the main link buyers land on, and for each one not live yet the DNS record the seller must add where they bought the domain. A store has up to 3 domains.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
Connect a domain the seller already owns to a store; it does not buy one. A root domain (example.com) also adds its www version. Needs a paid plan. The result lists the store's domains with the DNS record to add for each: give the seller those exact values to add where they bought the domain. A domain usually goes live a few minutes to a few hours after the record is added; check it then with chec
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
| hostname | string | yes | The domain alone, e.g. shop.example.com or example.com: no https:// and no path. |
Check again whether a domain is live, after the seller added its DNS record. While it is not live, the result repeats the record to add and any problem found with it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| domainId | string | yes | The domain id from list_store_domains. |
Choose the store's main link: one of its domains, or with no domainId its own MyDesigns link. Its other links send buyers to the main one. Choose a domain only once it is live.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
| domainId | string/null | no | The domain id from list_store_domains; leave it out to make the store's MyDesigns link main. |
Disconnect a domain from its store; the seller keeps owning it. If it was the main link, the store's MyDesigns link takes over. Ask the seller before removing one.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| domainId | string | yes | The domain id from list_store_domains. |
Open a card where the seller uploads their own images for one of their stores: the logo, the banner across the top of the home page, a separate banner for phones, or the favicon (the small icon in the browser tab). Use it when the seller already has the image: you cannot take an image from the chat. The card resizes each file and puts it on the store straight away, in place of the one there; it is
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
| images | array/null | no | The images the seller wants to upload, any of: logo, banner, mobile_banner, favicon. Leave it out for the logo and the banner. |
Puts one file from the store image upload card on the store. The card calls this.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id upload_store_image answered with. |
| image | string | yes | Which image: logo, banner, mobile_banner or favicon. |
| name | string | yes | The file's name. |
| base64 | string | yes | The file, base64. |
List the signed-in seller's MyDesigns stores with their public link, whether they can take orders yet (payouts connected), how many more stores the plan allows, and each store's about and contact details and seller info, with the seller info still missing. payoutAccounts are the seller's payout accounts, with the stores already on each, that a store can be put on with create_store or update_store.
No parameter schema on file.
Open a new MyDesigns store for the seller. It is live at its link right away but empty: put products in it with publish_products. It can take orders only once it is on a payout account. Check list_stores first: the plan limits how many stores a seller can have, and when the seller has a payout account that is ready, ask whether to use it for this store, naming it by the stores already on it, and o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Store name buyers see. |
| description | string | yes | Short description of what the store sells. |
| slug | string | yes | The store's web link name, not a postal address: lowercase letters, digits and hyphens, e.g. funny-dog-tees, so the link becomes https://funny-dog-tees.mdstore.io. Make it from the store name when the |
| payoutAccountId | integer/null | no | The id of one of the seller's payout accounts from list_stores to put the store on, so it can take orders. Only one that is ready; ask the seller first. |
Change a store's name, description, accent color, banner text, the logo's size and whether the store name shows next to it in the header, or its About page: the about text, the contact email, phone and address, and links to its social media. Only the values given change; everything else stays as it is; images are made with create_store_images or uploaded with upload_store_image, and the seller inf
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
| name | string/null | no | New store name. |
| description | string/null | no | New store description. |
| accentColor | string/null | no | Accent color as a hex code, e.g. #1E88E5. |
| bannerHeadline | string/null | no | Big headline on the home page banner. |
| bannerSubtitle | string/null | no | Smaller line under the banner headline. |
| logoSize | string/null | no | How big the logo is in the store's header: small, medium (the default), large or extra_large. |
| showStoreNameInHeader | boolean/null | no | Whether the store name shows in the header next to the logo; turn it off when the logo already has the name in it. A store with no logo always shows its name. |
| aboutText | string/null | no | Text for the store's About section. |
| contactEmail | string/null | no | Email buyers can write to, shown on the About page. |
| contactPhone | string/null | no | Phone number shown on the About page. |
| contactAddress | object/null | no | Postal address shown on the About page. Only the parts given change. |
| socialLinks | object/null | no | Links to the store's social media pages, shown on the About page, each a full link such as https://instagram.com/yourstore. Only the links given change. |
| clear | array/null | no | Fields to remove, any of: accentColor, bannerHeadline, bannerSubtitle, aboutText, contactEmail, contactPhone, contactAddress, socialLinks (all of them) or one link by its name (instagram, tiktok, face |
| payoutAccountId | integer/null | no | The id of one of the seller's payout accounts from list_stores to put the store on, so it can take orders. Only one that is ready; ask the seller first. |
Change the seller info of one of the seller's stores: who sells there (a person or a business), their legal address and how to reach them. The store's legal pages show it, so fill it only with what the seller tells you: never guess or make up a name, address or VAT number. Only the values given change, but the store keeps seller info only when it is complete, as the app does: when list_stores show
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
| sellerType | string/null | no | individual when a person sells in their own name, business when a company does. Needed the first time; ask the seller. |
| legalName | string/null | no | The person's full legal name, or the business's legal name. |
| dbaName | string/null | no | The name a business trades under, when it is not its legal name. |
| addressLine1 | string/null | no | Street and number. |
| addressLine2 | string/null | no | Second address line: suite, floor or unit. |
| addressCity | string/null | no | City. |
| addressState | string/null | no | State or province, e.g. IL; needed in the United States and Canada. |
| addressZip | string/null | no | ZIP or postal code. |
| addressCountry | string/null | no | Two-letter country code, e.g. US or DE. |
| legalEmail | string/null | no | Email for legal notices, shown on the legal pages. |
| phone | string/null | no | Phone number. |
| vatId | string/null | no | VAT number, e.g. DE123456789. |
| registrationNumber | string/null | no | A business's company registration number, e.g. HRB 12345. |
| clear | array/null | no | Fields to remove, any of: dbaName, addressLine2, addressState, phone, vatId, registrationNumber. |
Make images for one of the seller's stores with Dream AI and put them on it: the logo, the banner across the top of the home page, a separate banner for phones, and the favicon (the small icon in the browser tab). MyDesigns picks the model, shape and size each image needs and puts it on the store straight away, in place of the one there; the images are not saved in the seller's designs. A favicon
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
| images | array | yes | The images to make, each at most once. |
Deep search, the app's Scout AI: MyDesigns researches what really sells for one or more niches on Amazon right now and makes designs from each, each with a title, description and tags. It is heavy research that takes a few minutes, so do your own research and use create_products by default; offer deep search only when the seller wants to know what sells or wants ideas from real sales data, tell th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| niche | string | yes | The search terms, in the seller's words, one per line and up to 20, e.g. "funny nurse" or "funny nurse fishing dad". |
| count | integer | yes | How many designs to make for each search term, 1 to 10. |
| productType | string | no | The kind of product the designs are for: standard_tshirt (default), premium_tshirt, pullover_hoodie, crewneck_sweatshirt, long_sleeve, tank_top, mug, tumbler, tote_bag, throw_pillow, paper_poster, can |
| folderId | integer/null | no | The folder id from list_folders that the designs go in. Leave it out for the seller's first folder. |
| instructions | string/null | no | The seller's own instructions for how every design looks, in their words, as on the Scout AI page, e.g. "light colored text and elements, so they stand out on black shirts". Leave it out when the sell |
The designs a deep_search_designs run has made, by its jobId. RUNNING: still researching or designing, which usually takes a few minutes; the designs so far are listed; check again later, not over and over. DONE: all made. A card shows the seller each design's image and title, so do not put the images in your reply. The titles are long, search-friendly ones: shorten them for create_products if the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jobId | string | yes | The jobId deep_search_designs returned. |
Create 1 to 10 print-on-demand products for the seller, one per design: generate each design from a prompt with AI (or use an existing design), then make them into products with one of the seller's product profiles, which sets the products, colors, sizes, prices and mockups. Find the profile with list_profiles first: when the seller named a product (a tee, a Gildan 5000, a mug), search for it and
| Parameter | Type | Required | Notes |
|---|---|---|---|
| profileId | integer | yes | The profile id from list_profiles, one the seller asked for or chose. Never guess one. When more than one profile fits what they asked for (two t-shirts, say), ask which before calling, even when they |
| products | array | yes | The products to make, 1 to 10, each from its own design. |
| folderId | integer/null | no | The folder id from list_folders that new designs go in. Leave it out for the seller's first folder. A reused designId stays where it is. |
Put products into one of the seller's MyDesigns stores, where buyers can see and order them. Give either the jobId a create_products call returned, once get_product_status says READY (or FAILED, which publishes the ones that were made), or the productIds of products from list_products that are not in a store yet, e.g. ones made in an earlier chat. Products already in a store cannot be published ag
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer | yes | The store id from list_stores. |
| jobId | string/null | no | The jobId create_products returned. Give this or productIds. |
| productIds | array/null | no | Product ids from list_products, of products not in a store yet. Products made at different times go in one set at a time, each with its own jobId. Give this or jobId. |
Check whether products started with create_products are made yet, or products sent with publish_products are in the store yet, by the jobId each call returned. CREATING: still being made or published, which usually takes a few minutes; check again later, not over and over. READY: all made (or all in the store). FAILED: done, but some or all were not made; the failed list gives each one's designId
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jobIds | array | yes | The jobId of each create_products call to check, up to 25. |
How far a product job has got. The product card calls this while it is open.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| jobId | string | yes | The jobId create_products returned. |
List the seller's products, newest first, 24 per page: title, the blanks it is made on, when it was made, where it is (the store or shop it is in, or none when it is not in a store yet), price range, public link, status, how many items have been ordered, and the designId it is made from, which create_products can reuse at no credit cost. Leave storeId out to see every product, for questions like "
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer/null | no | Only this store's products: a store id from list_stores. Leave it out for every product. |
| inStore | boolean/null | no | true: only products in a store or shop. false: only products not in one yet. |
| search | string/null | no | Words to search for in the product title. |
| page | integer | no | Page number, starting at 1. |
Search the MyDesigns print-on-demand catalog: the blank products a design can be printed on (t-shirts, mugs, ...), with brand, product code, price range, number of variants and the print partners that make it. 24 per page. This is the catalog, not what the seller can make today: a product is made only from a profile, so use list_profiles for that.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string/null | no | Words to search for, e.g. 'gildan 5000', 'hoodie' or 'mug'. Leave empty to browse. |
| page | integer | no | Page number, starting at 1. |
List the seller's orders, newest first, 16 per page: order id, date, status, which shop or store it came from, the buyer's name, the total in USD and the items. Use it for the seller's latest orders or to find an order's id; get_order gives one order in full.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| storeId | integer/null | no | Only this store's orders: a store id from list_stores. Leave it out for every shop. |
| page | integer | no | Page number, from 1. |
Get one MyDesigns order by its id: the seller and their shop, the payment method, the billing address, every print partner with its own fulfillment status, created date and tracking, and every line with its partner, SKUs, print areas and manufacturing cost. One order can hold several fulfillments at the same partner, so a partner name is not unique. An admin token reaches any order; any other toke
| Parameter | Type | Required | Notes |
|---|---|---|---|
| orderId | integer | yes | The MyDesigns order id, the number shown on the order page. |
List the product profiles a product can be made from. A profile is a saved set of products (t-shirt, mug, ...) with their print partner, colors, sizes, prices and mockups, so a design becomes a product without choosing each of those. Shows the seller's own profiles, or MyDesigns' public ones. Each has its products with colors, sizes and price range. These are the only products the seller can make:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| publicProfiles | boolean | no | True for MyDesigns' public profiles, false for the seller's own. Look at the seller's own first; use the public ones when they have none or none fits. |
| search | string/null | no | Words to search for in the profile name or its products' names and kinds, e.g. 't-shirt', 'mug' or 'gildan'. |
| page | integer | no | Page number, starting at 1. |
Get the signed-in MyDesigns account: its id, name, email, subscription plan code (TIER_0 is the free plan) and the subscription that plan comes from: where it is billed (STRIPE, SHOPIFY, PKS, or NONE for the free plan), the plan type (STARTER, PRO, PRO_PLUS), the plan name, status, frequency (MONTHLY, YEARLY, LIFETIME), list price, when it renews or ends, any coupon, and for Stripe the amount the
No parameter schema on file.
Move one design to the seller's trash. The designs card calls this when the seller deletes a design from it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| designId | integer | yes | The design's id, from the card. |
List the seller's designs with their folder, title, tags and picture, folder by folder in the order list_folders gives, about 50 at a time. Give folderId for one folder, and search to find designs by title, tags or file name. When nextCursor is set there are more: call again with it and the same folderId and search. A cursor counts designs by place, so after moving or deleting designs it would ski
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folderId | integer/null | no | The folder id from list_folders; leave it out for all folders. |
| search | string/null | no | Words to look for in the title, tags or file name. |
| cursor | string/null | no | The nextCursor of the call before, for the next designs. |
Move designs into another of the seller's folders, by the ids list_designs gives, up to 100 at a time. Before moving more than a few, show the seller which go where and wait for their yes. Each folder is set up with its own image slots and fields, and designs move only between folders set up the same way; the result says which could not move and why. Those the seller moves in the MyDesigns app, wh
| Parameter | Type | Required | Notes |
|---|---|---|---|
| designIds | array | yes | The design ids from list_designs, up to 100. |
| folderId | integer | yes | The folder id from list_folders to move them into. |
Create designs, the app's Dream AI: make 1 to 10 designs for the seller with AI, one per prompt, and save them in their MyDesigns designs. No product is made. When the seller asks for Dream AI or the dreamer, or to dream designs, use this tool. Use it too when the seller wants designs only, or wants to see the designs before choosing products; when they want products, create_products makes the des
| Parameter | Type | Required | Notes |
|---|---|---|---|
| designs | array | yes | The designs to make, 1 to 10. |
| model | string/null | no | The AI model for all the designs. Leave it out for GPT Image 2.5 Sunburst; use another only when the seller asks for it. gpt-image-2.5-sunburst, gpt-image-2.5-flare, gpt-image-2, gpt-image-1.5, gpt-im |
| aspectRatio | string/null | no | The shape of all the designs as width:height, e.g. "1:1" (default), "2:3", "3:4", "16:9". Each model has its own sizes, so the closest one it has is used. |
| folderId | integer/null | no | The folder id from list_folders that the designs go in. Leave it out for the seller's first folder. |
Move designs the seller does not want to their MyDesigns trash, by the designIds create_designs, deep search or an upload gave. Use it only when the seller asked to delete them; when it is not clear which ones they mean, ask. They can restore them from the trash in the MyDesigns app for a while. The AI credits the designs cost are not given back. Never use a deleted designId again, for create_prod
| Parameter | Type | Required | Notes |
|---|---|---|---|
| designIds | array | yes | The designIds to delete, up to 50. |
Open a card where the seller uploads their own images (PNG or JPEG, up to 20 MB each) as designs. Use it when the seller wants products from art they already have: you cannot take an image from the chat, and never write a prompt to recreate one. The card saves the files and then gives you their designIds, which create_products takes instead of a prompt, at no credit cost. Uploading costs nothing.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folderId | integer/null | no | The folder id from list_folders to save the designs in. Leave it out for the seller's first folder. |
Saves one file from the upload card as a design. The card calls this.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folderId | integer | yes | The folder id upload_designs answered with. |
| name | string | yes | The file's name. |
| base64 | string | yes | The file, base64. |
List the seller's design folders with how many designs each holds. parentId is the folder it sits in, null for a top-level one. New designs go in the first top-level folder unless create_products, create_designs or deep_search_designs is given a folderId.
No parameter schema on file.
Make a design folder, at the top level or inside another folder. Names must differ from the other folders in the same place; check list_folders first to reuse one that already exists. Then pass its id as folderId to create_products, create_designs or deep_search_designs.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | The folder name, e.g. the niche or the store it is for. |
| parentId | integer/null | no | The folder id from list_folders to put it inside; leave it out for a top-level folder. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install MyDesigns or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| get_store_stats | no tags | |
| list_store_domains | no tags | |
| add_store_domain | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| check_store_domain | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| set_store_main_domain | state-write | state-write: declares readOnlyHint: false |
| remove_store_domain | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| upload_store_image | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| save_store_image | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| list_stores | no tags | |
| create_store | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| update_store | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| update_seller_info | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| create_store_images | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| deep_search_designs | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| get_deep_search_results | no tags | |
| create_products | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| publish_products | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| get_product_status | no tags | |
| product_creation_progress | no tags | |
| list_products | no tags | |
| list_product_types | no tags | |
| list_orders | no tags | |
| get_order | no tags | |
| list_profiles | no tags | |
| get_account | no tags | |
| delete_design_from_card | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| list_designs | no tags | |
| move_designs | state-write | state-write: declares readOnlyHint: false |
| create_designs | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| delete_designs | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| upload_designs | state-write | state-write: declares readOnlyHint: false |
| save_uploaded_design | state-write | state-write: declares readOnlyHint: false |
| list_folders | no tags | |
| create_folder | state-write | state-write: declares readOnlyHint: false |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.1.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish MyDesigns can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.