Works
Bidsketch MCP by usefulapi
Read Bidsketch clients, proposals, fees and templates; create and update clients, proposals, fees.
https://bidsketch.usefulapi.io/mcpclaude mcp add --transport http bidsketch https://bidsketch.usefulapi.io/mcpFor Cursor and other clients
{
"mcpServers": {
"bidsketch": {
"type": "http",
"url": "https://bidsketch.usefulapi.io/mcp"
}
}
}Watch out
Has tools that change things: 6 of them
The server itself marks these tools as deleting or overwriting data (destructiveHint): have the agent ask you before it calls them.
- Test
- Works: Handshake succeeded
- Tools
- 29 tools
- Handshake
- 923 ms
- Transport
- streamable-http · 2025-06-18
- Tested
- 6 November 2026
- Registry name
io.usefulapi/bidsketchv1.15.3- Listed
- 5 November 2026
- Updated
- 5 November 2026
- Website
- usefulapi.io/bidsketch/
The last 1 tests
| When | Result | Time |
|---|---|---|
| 2026-11-06 12:35 UTC | Handshake succeeded | 923 ms |
The 29 tools it listed
"Read only" and "Changes data" are the server's own marks. Underlined parameters are required.
bidsketch_add_proposal_feeAdd a fee to a proposal
WRITE: add a fee line to a proposal; it changes the proposal's price. Fixed fees take amount as the total; hourly, monthly and yearly fees take amount per unit and a quantity. POST /proposals/{id}/fees.json.
proposal_idnamefeetypeamountquantityunitcategorydescriptionoptionalbidsketch_add_proposal_sectionAdd a section to a proposal
WRITE: add a text section to a proposal, as an opening or closing section. POST /proposals/{id}/sections.json.
proposal_idnamesectiontypedescriptionbidsketch_create_clientCreate a client
WRITE: create a client in Bidsketch. first_name, last_name and email are required (put a company name in `name`). Some Bidsketch plans cap the number of clients (HTTP 426 when reached). POST /clients.json.
first_namelast_nameemailnamephonealt_phonewebsiteaddress_field_oneaddress_field_twocitystatepostal_zipcountrynotesother_contactbidsketch_create_feeCreate a saved fee
WRITE: save a reusable fee on the account (it is not added to any proposal). POST /fees.json.
namefeetypeamountquantityunitcategorydescriptionbidsketch_create_proposalCreate a proposal
WRITE: create a proposal for a client, optionally from a template (template_id from bidsketch_list_templates, which copies its sections and fees). The proposal is created as a draft; this tool does not send anything to the client. Some plans cap the number of proposals (HTTP 426). POST /proposals.json or POST /templates/{id}/proposals.json.
namedescriptioncurrencyproposal_datetaxtax2discountclient_idtemplate_idbidsketch_create_sectionCreate a saved section
WRITE: save a reusable content section on the account (it is not added to any proposal). POST /sections.json.
namesectiontypecategorydescriptionbidsketch_get_clientRead onlyGet a client
Get one client with full contact details, address, notes and secondary contact. GET /clients/{id}.json.
client_idbidsketch_get_feeRead onlyGet a saved fee
Get one saved fee with amount, quantity, unit and description. GET /fees/{id}.json.
fee_idbidsketch_get_proposalRead onlyGet a proposal
Get one proposal: status, client, currency, fee subtotals and total, tax/discount, settings and counts of its opening sections, fees and closing sections. GET /proposals/{id}.json.
proposal_idbidsketch_get_proposal_contentRead onlyGet a proposal's content
Get the full content of a proposal in order: opening sections, fees and closing sections. GET /proposals/{id}/content.json.
proposal_idbidsketch_get_proposal_feeRead onlyGet a proposal fee
Get one fee line of a proposal. GET /proposals/{id}/fees/{fee_id}.json.
proposal_idfee_idbidsketch_get_proposal_sectionRead onlyGet a proposal section
Get one section of a proposal with its HTML description. GET /proposals/{id}/sections/{section_id}.json.
proposal_idsection_idbidsketch_get_proposal_statsRead onlyGet proposal stats
Proposal statistics for the account (the total number of proposals). GET /proposals/stats.json.
bidsketch_get_sectionRead onlyGet a saved section
Get one saved section with its HTML description. GET /sections/{id}.json.
section_idbidsketch_get_templateRead onlyGet a proposal template
Get one template with the saved sections and fees it is made of. GET /templates/{id}.json.
template_idbidsketch_list_client_proposalsRead onlyList a client's proposals
List the proposals of one client with status (Pending, Viewed, Accepted, Declined) and draft flag. GET /clients/{id}/proposals.json.
client_idpageper_pagebidsketch_list_clientsRead onlyList clients
List the clients (people or companies proposals are prepared for) with id, name, email and phone. GET /clients.json.
pageper_pagebidsketch_list_feesRead onlyList saved fees
List the reusable fees saved on the account with category, type and total. GET /fees.json.
pageper_pagebidsketch_list_proposal_feesRead onlyList a proposal's fees
List the fee lines of one proposal with type, totals and the optional flag. GET /proposals/{id}/fees.json.
proposal_idpageper_pagebidsketch_list_proposal_sectionsRead onlyList a proposal's sections
List the text sections of one proposal (opening and closing). GET /proposals/{id}/sections.json.
proposal_idpageper_pagebidsketch_list_proposalsRead onlyList proposals
List all proposals with name, status (Pending, Viewed, Accepted, Declined), draft flag and dates. GET /proposals.json.
pageper_pagebidsketch_list_sectionsRead onlyList saved sections
List the reusable content sections saved on the account with category and type (opening or closing). GET /sections.json.
pageper_pagebidsketch_list_templatesRead onlyList proposal templates
List the proposal templates saved on the account. Use a template id with bidsketch_create_proposal. GET /templates.json.
pageper_pagebidsketch_update_clientChanges dataUpdate a client
WRITE: change fields of an existing client; only the fields you pass are sent and overwrite the old values. PUT /clients/{id}.json.
client_idfirst_namelast_nameemailnamephonealt_phonewebsiteaddress_field_oneaddress_field_twocitystatepostal_zipcountrynotesother_contactbidsketch_update_feeChanges dataUpdate a saved fee
WRITE: change a saved fee; only the fields you pass are sent. Proposals that already use it keep their own copy. PUT /fees/{id}.json.
fee_idnamefeetypeamountquantityunitcategorydescriptionbidsketch_update_proposalChanges dataUpdate a proposal
WRITE: change fields of a proposal; only the fields you pass are sent and overwrite the old values. PUT /proposals/{id}.json.
proposal_idnamedescriptioncurrencyproposal_datetaxtax2discountclient_idbidsketch_update_proposal_feeChanges dataUpdate a proposal fee
WRITE: change a fee line of a proposal (changes its price); only the fields you pass are sent. PUT /proposals/{id}/fees/{fee_id}.json.
proposal_idfee_idnamefeetypeamountquantityunitcategorydescriptionoptionalbidsketch_update_proposal_sectionChanges dataUpdate a proposal section
WRITE: change a section of a proposal; only the fields you pass are sent and overwrite the old values. PUT /proposals/{id}/sections/{section_id}.json.
proposal_idsection_idnamesectiontypecategorydescriptionbidsketch_update_sectionChanges dataUpdate a saved section
WRITE: change a saved section; only the fields you pass are sent. Proposals that already use it keep their own copy. PUT /sections/{id}.json.
section_idnamesectiontypecategorydescription
Is this yours?
Claim it to hear the moment it breaks, correct this page and add your own ways to use it.
A test is the handshake and the tool list: no tool was called. Names and descriptions are as listed by whoever registered the server; we haven't checked them.