Prompts and resources
The built-in agency procedures and the context documents the Dashly MCP server offers.
Next to its tools, the server offers the two other MCP capabilities: prompts, the agency's recurring procedures written once and offered as commands, and resources, context documents a client loads once instead of calling tools for.
Prompts
A prompt is a ready-made instruction that composes the existing tools. It grants nothing: the credential still decides what may be read or written, and a procedure the credential is not allowed to run fails exactly as the same calls typed by hand would.
List them with prompts/list; fill one with prompts/get, which returns the user message
your client sends to the model:
{
"jsonrpc": "2.0",
"id": 3,
"method": "prompts/get",
"params": {
"name": "weekly_client_update",
"arguments": { "client": "hsbftmp3f5", "since": "2026-10-22" }
}
}A missing required argument is a JSON-RPC error (-32602) naming it. Arguments are strings.
Every prompt carries the same house rules for the model: work only from what the tools
return and say what is missing rather than inventing it; read dashly://conventions before
writing a status, moving a deal or assigning someone; cite the public id of everything it
mentions; propose before writing anything back; answer in the language of the request.
weekly_client_update
What moved on one client over the week: requests opened and closed, time spent, what is left on the retainer, and what is late. Produces a short update an account manager can send.
| Argument | Required | Description |
|---|---|---|
client | yes | Client name or public id. |
since | no | Start of the period (YYYY-MM-DD). Defaults to 7 days ago. |
prepare_meeting
The state of one account before a call: open subjects, commitments made since last time, retainer left, open deals, and three questions worth asking. Produces a one-page brief.
| Argument | Required | Description |
|---|---|---|
client | yes | Client name or public id. |
estimate_request
What comparable work has actually cost the agency, from its own closed tickets and the time logged on them. Produces a range (shortest, median, longest) with the comparable items listed, or no number when fewer than three comparable items exist.
| Argument | Required | Description |
|---|---|---|
request | yes | The request to estimate, in a sentence. |
client | no | Client name or public id, when it is for a known client. |
catch_up_on_late_work
Everything past its due date and still open, grouped by client, with a proposed redistribution that looks at who already carries the late work.
| Argument | Required | Description |
|---|---|---|
scope | no | A client, a project or a team. Defaults to the whole agency. |
pipeline_review
Two lists of deals: those whose expected close date has passed, and those that have stopped moving, each with its value, owner and one next step. No forecast.
| Argument | Required | Description |
|---|---|---|
pipeline | no | Pipeline name or public id. Defaults to all of them. |
prepare_next_cycle
A selection of backlog tickets for a project's next cycle, sized on the velocity its last closed cycles actually delivered. The selection is proposed; on a yes, only each selected ticket's cycle is set.
| Argument | Required | Description |
|---|---|---|
project | yes | Project name or public id. |
split_deal_into_parts
Builds a complex project sold as several deals: one deal per milestone, recurring parts (maintenance, evolutions…) as recurring deals, follow-up deals on the follow-up pipeline. The parts are proposed as a table and written in a single action after a yes.
| Argument | Required | Description |
|---|---|---|
deal | yes | Deal name or public id (the first part). |
parts | no | The parts as the person describes them, if given. |
ai_visibility_setup
Every AI-visibility setting of one client — brand, domain, competitors, engines, tracked questions, tracked keywords — read, reviewed against the latest results, and changed after a yes. It never claims the module is switched on when it is not (switching it on bills the client and is done in the dashboard), and runs a capture only when asked, since a capture spends the agency's allowance. See AI visibility from Claude.
| Argument | Required | Description |
|---|---|---|
client | yes | Client name or public id. |
goal | no | What the person wants, if they said it (e.g. "add three competitors"). |
Resources
Four read-only JSON documents. resources/list answers without a credential;
resources/read reads with the caller's credential, so each document only contains what
that credential may see.
{ "jsonrpc": "2.0", "id": 4, "method": "resources/read", "params": { "uri": "dashly://conventions" } }The tools cover the same ground on demand, which is what an agent needs after it creates a field or a stage. The resources exist so that an agent does not spend its first turns learning the shape of the product.
dashly://catalog
Every resource of the API with, for each, its readable and writable fields, its filters, its
sorts and its relations. Enough to write a correct call without guessing. The same content as
the list_resources tool.
dashly://fields
The built-in fields and the agency's own custom fields, per entity (client, deal, lead,
ticket), with their key, type and options. This is what says how to fill customFields. The
same content as the list_fields tool.
dashly://me
Which agency the credential belongs to, what it is allowed to do (its scopes), and how much
of the monthly token allowance is left. Read it first when a call is refused. The same content
as the get_account tool.
dashly://conventions
The words this agency uses, which no schema can tell you:
| Section | Contents |
|---|---|
workflowColumns | The ticket workflow columns, in order, and which ones mean finished (isDone). |
pipelines | The sales pipelines. |
pipelineStages | Their stages, in order, each with its pipelineId. |
ticketCategories | Ticket categories. |
projectTypes | Project types. |
leadSources | Lead sources. |
lostReasons | Reasons a deal was lost. |
teams | Teams. |
people | The agency's members. |
howToRead | Short rules for using the above. |
The rules it spells out:
- A ticket's
statusmust be one ofworkflowColumns[].id. Those keys are the agency's own. - "Is this finished?" is
isDoneon the column, never a comparison with the literaldone: an agency may have several terminal columns, and none need be called done. - A deal's
stageIdmust belong to the deal's own pipeline: matchpipelineIdon the stage before moving anything. - Custom fields are not in this document; they are in
dashly://fields.
Each section degrades on its own: if the credential may not read one of them (for example
the members list), that section carries an unavailable entry with the refusal and the
others are still returned.