Agents
Tools reference
Every tool of Mora's MCP server, with its parameters, generated from the running server.
Each tool below is listed with the parameters the server accepts today. Tools are grouped by who can call them: anyone, any signed-in account, labs, providers.
Anyone
search_listingsSearch datasets
One search over two shelves: the private datasets companies license on Mora, and the free public ones on Hugging Face and Kaggle with what their license allows. Listings with "preview": true are examples shown while the first providers come on. They are not real offers; say so when you report them.
| Parameter | Type | Description |
|---|---|---|
query | string | Words to look for, e.g. "HVAC" or "radio audio". For public data the usual terms work best: "speech recognition" for audio with transcripts, "NER" for annotated entities, "question answering", "human preference" or "RLHF", "object detection" for boxed images, "human annotated". |
type | string | A data type slug from list_data_types |
status | "raw" | "labeled" | "verified" | |
includeFree | boolean | Also search free public datasets |
get_listingGet a listing
Everything public about one listing. The provider is never named.
| Parameter | Type | Description |
|---|---|---|
idrequired | string | The id from search_listings |
get_sampleGet sample records
A few records from a listing, to test before licensing: check the fields, run them through a model. Mora draws them at random from the full dataset, so the provider cannot pick the best ones, and checks them (rights, no personal data, not already public). Samples of preview listings are illustrative.
| Parameter | Type | Description |
|---|---|---|
idrequired | string | The id from search_listings |
list_data_typesList data types
The kinds of records traded on Mora and what labs ask for in each.
No parameters.
match_schemaCheck a need against Mora
A lab says what it wants and Mora answers what it already has. Two ways to say it, alone or together: `columns` (for example image, label, confidence), answered column by column; and a `standard` with the `parts` wanted (for a software project: the code, its Jira issues, its Slack discussion), answered part by part. Use it before asking for data. Then tell the person plainly: "Mora has a and b, not c", and offer to have Mora ask its providers for the rest with ask_for_data.
| Parameter | Type | Description |
|---|---|---|
columns | object[] | |
standard | string | A standard id from list_standards, e.g. "software-project" |
parts | string[] | The parts wanted, e.g. ["code", "issues", "discussion"] |
list_standardsList dataset standards
Mora's standards: for each kind of data (software project, support conversations, field service records, speech audio), the parts a dataset can hold, which are required, the field names of each part, and what is measured about it before anyone pays. A provider fits its data to one and states the parts it does not have; a lab asks for parts in the same terms. Use the field names as given.
No parameters.
find_public_datasetsFind public datasets
Free public datasets on Hugging Face and Kaggle matching a few words, with license and what it allows. Use it before paying (is this already free?) and before listing (is mine already online?). A name search, not a content match: open the results to judge.
| Parameter | Type | Description |
|---|---|---|
wordsrequired | string | What the data is, in a few words, e.g. "hvac service tickets" |
list_connectorsList connectable tools
The tools a provider can connect to Mora (Slack, Jira, Zendesk, ...), what each holds that a lab would license, and the signs that a company uses it. To propose connections, look at what you can see of the person's work: in a code repository, read the dependencies, the example environment file, the CI configuration and the git remote, and match them against `signs`. Then tell the person which tools you found and why, and ask which ones to connect.
No parameters.
A new account
whoamiWho am I
The account this connection acts for, its company, and how it appears to others.
No parameters.
register_companyRegister the company
The company step of signing up: tells Mora which company this account acts for, so Mora can verify it. Ask the person for every field and read it back before calling. This can be done once.
| Parameter | Type | Description |
|---|---|---|
rolerequired | "provider" | "lab" | provider: the company has records to license. lab: it wants data to train or evaluate models. |
companyrequired | string | Legal company name |
websiterequired | string | Company website, e.g. company.com |
countryrequired | string | Country of registration, English name, e.g. "United States" |
titlerequired | string | The person's role at the company |
note | string | One sentence: what data they have, or what they are looking for |
Any signed-in account
my_dealsMy deals
Every offer this company made or received, the amount on the table, and whose move it is. The other side is an anonymous id, never a name.
No parameters.
Lab
ask_for_dataAsk Mora for data
Asks Mora to find private data that is not listed yet. Providers and their agents see the request (never who asked) and can answer with a listing. Say it in the terms of a standard when one fits (list_standards) and name the parts you want; if none fits, give your own schema in `fields`. You write the request, the person does not fill in a form: work it out from their project, read it back, and call this on a yes. It commits nothing.
| Parameter | Type | Description |
|---|---|---|
whatrequired | string | The data, in a few words, e.g. "electrician service tickets with the fix that worked" |
mustHaverequired | string | Volume, years, languages, and what it will train or test |
standard | string | A standard id from list_standards |
parts | string[] | The parts of that standard you want, e.g. ["code", "commits", "ci"] |
fields | object[] | Your own schema, when no standard fits |
get_datasetRead a licensed dataset
The records of a dataset this lab has licensed, 200 at a time. It opens once the offer was accepted and Mora has verified both sides: that check is made when a deal is agreed, never before. It comes with a manifest: the standard, the parts held and missing, each part's fields, and `train`, the ways to turn it into training examples with the parts it has. Save each part as its own JSON Lines file, then build examples from a recipe: for a software project, the commit message and the files before as input, the diff as output. Pass `next` back as `after` to read on.
| Parameter | Type | Description |
|---|---|---|
listingrequired | string | The listing id |
part | string | Only this part, e.g. "commits" |
after | string | The `next` value of the previous page |
start_offerPrepare an offer
Prepares an offer on a listing and returns the page where the person reads it and sends it. You never send an offer yourself: an offer commits the company. Agree the amount and terms with the person first.
| Parameter | Type | Description |
|---|---|---|
idrequired | string | The listing id from search_listings |
amountrequired | string | e.g. "$120k" |
terms | string | Use, length, exclusivity |
Provider
create_listingCreate a listing
List a set of records for license. Nothing is uploaded: this is a description. It is saved for Mora to review and is visible to nobody until Mora approves it. Confirm the details with the person before calling.
| Parameter | Type | Description |
|---|---|---|
titlerequired | string | What a lab would search for. Never the company name. |
recordTyperequired | string | A data type slug from list_data_types, or "other" |
systemrequired | string | Where the records live, e.g. ServiceTitan |
yearsrequired | string | e.g. "2016 to 2025" |
volumerequired | string | e.g. "About 400,000 work orders" |
contentsrequired | string | What a typical record contains |
ownsrequired | "yes" | "unsure" | Does the company own the records? |
personalrequired | "yes" | "no" | Do they contain personal details? |
contractsrequired | "yes" | "unsure" | Do customer contracts allow licensing? |
exclusive | boolean | true: sold once, to one lab. false: can be licensed to several labs. |
standard | string | A standard id from list_standards, when one fits |
parts | object | With a standard: every part of it, there or not. Say plainly which parts the company does not have (a solo developer has no Jira and no Slack): a lab pays for what is there. |
fields | object[] | The schema: one entry per field of a record. You write it, the person does not fill in a form. Records must not name anyone. Replace every personal value (name, email, phone, address, account or policy number) with a generated id, and use the same id each time the same person appears, so records still link up. Mark those fields personal: "replaced". |
visibility | "public" | "private" |
connect_toolConnect a tool
Start connecting one of the company's tools so Mora can draw a random sample from it. Call it only after the person said yes to that tool. A company can have several workspaces or sites: ask which one, and tell the person to pick that one on the page. You get a mora.market link: give it to the person, who opens it signed in to Mora and lands on the tool's own authorization page. You never authorize it yourself. If the tool is not open yet, Mora records the request.
| Parameter | Type | Description |
|---|---|---|
toolrequired | string | An id from list_connectors, e.g. "slack" |
workspace | string | Which workspace or site the person wants to connect, e.g. "acme-support" |
why | string | What you saw that points to this tool, e.g. "@slack/bolt in package.json" |
read_sourceRead a connected tool
Reads the company's own content from a tool it connected, so you can build the dataset. Without `where` it says what the tool holds (for Slack: the channels with their ids) and which kinds of content it can read. A source often holds several kinds and a dataset is worth more with all of them: for a Figma file, read the comments, the design (every layer with its text, sizes, colors and fonts), the images (frames rendered as PNG, to send as files) and the versions (the history of changes). What comes back is raw and may name people: it is for you and the person only. Anonymize it before sending anything to Mora.
| Parameter | Type | Description |
|---|---|---|
toolrequired | string | The id of a connected tool, from my_connections |
where | string | Which part: a Slack channel id, or the link of a Figma file. Ask the person. |
what | string | Which kind of content, from the `kinds` of the first answer, e.g. "design". Defaults to the first kind. |
page | integer | Content comes 200 records at a time (40 for images). The answer says when there is a next page. |
submit_recordsSend records to Mora
Sends a batch of a listing's records to Mora, up to 200 at a time, as objects that follow the listing's schema. Records must not name anyone. Replace every personal value (name, email, phone, address, account or policy number) with a generated id, and use the same id each time the same person appears, so records still link up. Mark those fields personal: "replaced". Mora checks every batch and keeps nothing from a batch that still holds an email, a phone number or a card number: fix it and send it again. The records can come from read_source, from an export the person gave you, or from their own systems.
| Parameter | Type | Description |
|---|---|---|
listingrequired | string | The listing id from create_listing or my_listings |
part | string | For a listing that follows a standard: the part these records belong to, e.g. "commits". Its records use that part's field names and no others (list_standards). |
recordsrequired | object[] |
send_filesSend files to Mora
For datasets made of files (photos, audio, scans, documents). Two steps. First call this with what you will send: for each file its name, type, size in bytes and SHA-256. Mora answers file by file: an address to send the bytes to, or a refusal (already on Mora from another provider, already sent by you). Then PUT each file's bytes to its address with the same Authorization header you use for Mora. Mora keeps a file only if the bytes match the SHA-256 you announced. Pick the files worth sending before you announce them: sort the person's photos, drop blurry ones and near-copies. Up to 50 files per call, 100 MB each.
| Parameter | Type | Description |
|---|---|---|
listingrequired | string | The listing id |
part | string | The part of the standard these files belong to, if the listing follows one |
filesrequired | object[] |
submit_repositoryGive Mora the repository
For a software project: names the GitHub repository behind a listing. Mora copies it itself and measures it (code, tests, history, license, secrets), so nothing about the code rests on what you or the person say. It never runs the code. A private repository needs the GitHub connection (connect_tool). The verdict appears on the listing page a minute later; the numbers stay with Mora.
| Parameter | Type | Description |
|---|---|---|
listingrequired | string | The listing id |
reporequired | string | owner/name, as on GitHub |
finish_datasetFinish the dataset
Says that every record is in. Mora then draws the listing's sample itself, at random, from everything received: neither you nor the person picks it. That sample is what labs test. If the listing has no schema, Mora reads one off the sample. Mora also checks everything it received (copies, filler, records already on Mora from another provider, passages already public) and recounts the measures itself. You get its verdict, not its numbers. A dataset that is mostly copies or already public is refused.
| Parameter | Type | Description |
|---|---|---|
listingrequired | string | The listing id |
my_connectionsMy connections
The company's tools and whether each is connected, open to connect, asked for, or not open yet.
No parameters.
open_requestsWhat labs are asking for
The data labs asked Mora to find, with the standard and parts or the schema they want. The lab is an anonymous id. If the company holds something that fits, say so to the person and offer to list it in the same terms.
No parameters.
my_listingsMy listings
This company's listings and where each stands in Mora's review.
No parameters.