Skip to main content
Glama

get-associated-opportunities

Fetch sales opportunities linked to a specific account in Dynamics 365 to track potential deals and manage customer relationships.

Instructions

Fetch opportunities for a given account from Dynamics 365

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
accountIdYes

Implementation Reference

  • src/tools.ts:72-101 (registration)
    Registration of the 'get-associated-opportunities' tool, including input schema { accountId: z.string() } and inline handler function that calls d365.getAssociatedOpportunities and returns formatted JSON response or error.
    server.tool(
      "get-associated-opportunities",
      "Fetch opportunities for a given account from Dynamics 365",
      { accountId: z.string() },
      async (req) => {
        try {
          const response = await d365.getAssociatedOpportunities(req.accountId);
          return {
            content: [
              {
                type: "text",
                text: JSON.stringify(response, null, 2),
              },
            ],
          };
        } catch (error) {
          return {
            content: [
              {
                type: "text",
                text: `Error: ${
                  error instanceof Error ? error.message : "Unknown error"
                }, please check your input and try again.`,
              },
            ],
            isError: true,
          };
        }
      }
    );
  • Core handler logic in Dynamics365 class: validates accountId, constructs OData endpoint to filter opportunities by _customerid_value eq accountId, and calls makeApiRequest to fetch from Dynamics 365 API.
    public async getAssociatedOpportunities(accountId: string): Promise<any> {
      if (!accountId) {
        throw new Error("Account ID is required to fetch opportunities.");
      }
    
      const endpoint = `api/data/v9.2/opportunities?$filter=_customerid_value eq ${accountId}`;
      return this.makeApiRequest(endpoint, "GET");
    }
  • Helper method in Dynamics365 class that handles authentication, constructs full API URL, sets headers, makes fetch request to Dynamics 365 API, and processes response or error.
    private async makeApiRequest(
      endpoint: string,
      method: string,
      body?: any,
      additionalHeaders?: Record<string, string>
    ): Promise<any> {
      const token = await this.authenticate();
      const baseUrl = this.d365Url.endsWith("/")
        ? this.d365Url
        : `${this.d365Url}/`;
      const url = `${baseUrl}${endpoint}`;
    
      const headers: Record<string, string> = {
        Authorization: `Bearer ${token}`,
        Accept: "application/json",
        "Content-Type": "application/json",
        "OData-MaxVersion": "4.0",
        "OData-Version": "4.0",
        ...additionalHeaders,
      };
    
      try {
        const response = await fetch(url, {
          method,
          headers,
          body: body ? JSON.stringify(body) : undefined,
        });
    
        if (!response.ok) {
          throw new Error(
            `API request failed with status: ${
              response.status
            }, message: ${await response.text()}`
          );
        }
    
        return await response.json();
      } catch (error) {
        console.error(`API request to ${url} failed:`, error);
        throw new Error(
          `Failed to make API request: ${
            error instanceof Error ? error.message : String(error)
          }`
        );
      }
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/srikanth-paladugula/mcp-dynamics365-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server