MCP Server for Siebel CRM REST API integration
Mixed quality across 24 tools. Strengths: tool names follow verb_noun convention (get_, search_, create_, update_, delete_). Most tools have descriptions. Weaknesses: 13/24 tools lack visible input schemas in the source code provided (search_accounts, search_contacts, search_opportunities, update_record, run_query, get_quote partially visible, call_business_service, run_workflow, template_qa, and several others show only risk/description/file but no actual schema in the code sample). Parameter descriptions are present but often minimal (10-30 chars). Output schemas undocumented for most tools. Error handling exists but generic (catch-all try/catch in index.ts returning only error.message). Destructive tools (delete_record, delete_attachment) require confirm=true which is good, but no dry-run support. Idempotency not addressed. Security: credentials injected via dotenv (acceptable), but no audit logging, rate limiting, or scope declarations visible. Composition: tools are narrowly scoped and chainable (e.g., search_accounts → get_account → create_contact uses account ID), but no batch operations offered. Response field naming is inconsistent (e.g., 'additionalFields' vs 'fields' vs 'inputArgs'). No pagination metadata visible in schemas.
Creates a child record associated to a parent record in Siebel. Uses the REST path POST /data/{BO}/{BC}/{parentId}/{childBC}. Examples: add a line item to a Quote, add a contact to an Account, add a product to an Opportunity.
Invokes a Siebel Business Service method via REST API. Business Services are reusable server-side components in Siebel that encapsulate business logic. Common examples: Workflow Process Manager, EAI Siebel Adapter, FINS Calculate Payment Service, Mailer, Document Server. Endpoint: POST /service/{ServiceName}/{MethodName}
Creates an activity or task in Siebel CRM
Creates a new contact in Siebel CRM via REST API. A contact is a person associated to an account/company. Use search_contacts first to verify the contact doesn't already exist.
Creates a new sales Opportunity in Siebel CRM via REST API. An Opportunity represents a potential sale linked to an Account.
13/24 tools lack visible input schemas in provided source. search_accounts, search_contacts, search_opportunities, update_record, run_query, call_business_service, run_workflow, template_qa show only file paths but no actual schema definition in code sample. This violates pattern:constrained-input and pattern:tool-description.
Output schemas undocumented. No tool definition includes return type documentation, field names, or structure. LLMs cannot infer what fields to expect or how to chain results. E.g., get_account doesn't document whether it returns 'account_id', 'id', 'row_id', or other field names. Violates pattern:tool-description and pattern:response-shaper.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Creates a new record in any Siebel Business Object/Component via REST. Generic tool that works with any BC. For specific entities (Contact, Opportunity) prefer the dedicated tools. Fields must match the Siebel BC field names exactly.
Deletes an attachment from a Siebel record. ⚠️ This operation is IRREVERSIBLE. Requires confirm=true to execute.
Deletes a record from any Siebel Business Object/Component by its ID. ⚠️ This operation is IRREVERSIBLE. Requires confirm=true to execute.
Retrieves a Siebel CRM account by its internal ROW_ID. To search by RUT or Razón Social, use search_accounts instead.
Downloads an attachment from a Siebel record. Uses AttachmentDocIO with ?inlineattachment=true to get the file content as Base64. Can save the file to disk if output_dir is provided (must be within user home directory).
Retrieves child records associated to a parent record in Siebel. Uses the REST path /data/{BO}/{BC}/{parentId}/{childBC}. Examples: line items of a Quote, contacts of an Account, products of an Opportunity.
Retrieves a Siebel CRM contact by ID
Retrieves List of Values (LOV) entries from Siebel CRM. LOVs are dropdown/picklist values used across the application. Use this to discover valid values for fields like Sales Stage, Status, Priority, Activity Type, etc. Filter by LOV Type to get values for a specific field.
Retrieves a Siebel CRM opportunity by ID
Retrieves a Siebel Quote (Oferta Económica) via REST API. Can fetch by ID or search by quote number, name, account or status. Also retrieves associated line items (Quote Items) if requested.
Lists all attachments associated to a Siebel record. Uses the child BC path: GET /data/{BO}/{BC}/{parentId}/{AttachmentBC}. Common attachment BCs: 'Account Attachment', 'Opportunity Attachment', 'Contact Attachment', 'Quote Attachment', 'Action Attachment'.
Runs a query on any Siebel Business Object
Executes a Siebel Workflow Process via REST API. Endpoint: POST /siebel/v1.0/workflow/{WorkflowName}. The workflow must be active and deployed in Siebel. Input arguments depend on the specific workflow definition.
Searches for Siebel CRM accounts by various criteria
Searches for Siebel CRM contacts by various criteria
Searches for Siebel CRM opportunities by various criteria
PDF template processing and Q&A tool
Updates an existing record in Siebel CRM
Uploads a file as an attachment to a Siebel record. Reads the file from disk (must be in Desktop, Documents or Downloads) and POSTs to AttachmentDocIO.
Error handling is generic. index.ts catches all errors and returns only error.message as plain text. LLMs receive no categorization (retryable vs user-fixable vs fatal), no invalid value echoed back, no recovery guidance. E.g., 'Invalid status' tells the agent nothing about valid options. Violates pattern:recovery-guide and pattern:error-classification.
Pagination not addressed. Tools that search or list (search_accounts, search_contacts, search_opportunities, get_child_records) do not document page/offset/limit parameters or total count in responses. Large result sets will blow context windows. Violates pattern:paginated-result.
No audit logging or scope declarations. Tools do not declare required permissions (e.g., 'read:account', 'write:contact'). No evidence of request logging for compliance/debugging. delete_record and delete_attachment are DESTRUCTIVE but lack audit trail documentation. Violates pattern:audit-trail and pattern:scope-declaration.
Parameter descriptions inconsistent or minimal. 'status' parameter in create_activity described as 'Status (e.g. In Progress, Done, Not Started)', no enum constraint, no clarification that this is Activity status not Record status. 'type' parameter similarly vague. Violates pattern:constrained-input.
No idempotency guarantees. create_contact, create_opportunity, create_activity, add_child_record are not documented as idempotent. If an agent retries due to network timeout, duplicates may be created. Violates pattern:idempotent-operation.
Response field naming not guaranteed to match downstream tool parameters. create_contact returns fields but no schema specifies field names. If downstream get_contact expects 'contact_id' but create_contact returns 'id', chaining breaks. Violates mxe:response-field-naming.
Rate limiting absent. No mention of rate-limit headers, backoff guidance, or throttling parameters. Runaway agents looping on search or create calls could overwhelm Siebel API. Violates pattern:scope-declaration (permissioning includes rate guards).
template_qa tool description is 40 chars ('PDF template processing and Q&A tool'), too vague. What does it do? When should it be called? What are inputs and outputs? Violates pattern:tool-description (10 - 1024 chars, must be clear). Inferred implementation (only file path provided, no schema/params shown) caps tool at 50.