send_proposal
Send proposals to assigned contacts using Offorte Proposal Software. Choose between Offorte or self-delivery methods and include custom messages with your proposal submissions.
Instructions
Send a proposal to its assigned contacts
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| proposal_id | Yes | ||
| send_message_id | No | ||
| send_method | No | offorte | |
| send_message | No | ||
| password_reset | No |
Input Schema (JSON Schema)
{
"properties": {
"password_reset": {
"type": "boolean"
},
"proposal_id": {
"type": "number"
},
"send_message": {
"type": "string"
},
"send_message_id": {
"type": "number"
},
"send_method": {
"default": "offorte",
"enum": [
"offorte",
"self"
],
"type": "string"
}
},
"required": [
"proposal_id"
],
"type": "object"
}
Implementation Reference
- The main handler for the 'send_proposal' tool. Defines the tool with name, description, parameters (input schema), and the execute function that sends a POST request to `/proposals/${proposal_id}/send/` and parses the response.export const sendProposalTool: Tool<typeof parameters._type, typeof parameters> = { name: 'send_proposal', description: 'Send a proposal to its assigned contacts', parameters, annotations: { title: 'Send Proposal', openWorldHint: true, }, async execute({ proposal_id, ...body }) { const result = await post(`/proposals/${proposal_id}/send/`, body); const parsed = sendProposalSchema.safeParse(result); if (!parsed.success) { throwApiInvalidResponseError(parsed.error); } return JSON.stringify(parsed.data); }, };
- src/schemas/proposals.ts:77-86 (schema)Output schema used by the send_proposal handler to validate the API response, consisting of an array of receivers with email, fullname, id, and proposal_link.export const sendProposalReceiverSchema = z.object({ email: z.string(), fullname: z.string(), id: z.number(), proposal_link: z.string(), }); export const sendProposalSchema = z.object({ receivers: z.array(sendProposalReceiverSchema), });
- src/tools/register.ts:17-39 (registration)Registration of the sendProposalTool: imported at line 17, included in the tools array at line 34, and all tools are registered to the FastMCP server in the registerTools function.import { sendProposalTool } from './proposals/send-proposal.js'; const tools = [ getInitialContextTool, getAccountUsersTool, getAutomationSetsTool, getContactDetailsTool, getDesignTemplatesTool, getEmailTemplatesTool, getProposalDirectoriesTool, getProposalTemplatesTool, getTextTemplatesTool, searchContactOrganisationsTool, searchContactPeopleTool, searchProposalsTool, createContactTool, createProposalTool, sendProposalTool, ]; export function registerTools({ server }: { server: FastMCP }) { (tools as unknown as FastMCPTool<Record<string, unknown>, ToolParameters>[]).map(initialContextGuard).forEach((tool) => server.addTool(tool)); }