Skip to main content
Glama

contentful-mcp

client.test.ts3.87 kB
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest" import { server } from "../msw-setup" // Mock these modules at the top level vi.mock("@contentful/node-apps-toolkit", () => ({ getManagementToken: vi.fn(), })) vi.mock("contentful-management", () => ({ createClient: vi.fn(), })) describe("getContentfulClient", () => { beforeEach(() => { server.listen() }) afterEach(() => { server.resetHandlers() server.close() vi.resetModules() vi.clearAllMocks() }) it("uses CONTENTFUL_MANAGEMENT_ACCESS_TOKEN if available", async () => { process.env.CONTENTFUL_MANAGEMENT_ACCESS_TOKEN = "test-token" process.env.CONTENTFUL_HOST = "api.contentful.com" const mockCreateClient = vi.fn() const { createClient } = await import("contentful-management") vi.mocked(createClient).mockImplementation(mockCreateClient) const { getContentfulClient } = await import("../../src/config/client") await getContentfulClient() expect(mockCreateClient).toHaveBeenCalledWith( { accessToken: "test-token", host: "api.contentful.com", headers: { "X-Contentful-user-agent": "contentful-community-mcp/1.0.0", }, }, { type: "plain" }, ) }) it("gets a token using PRIVATE_KEY and APP_ID if MANAGEMENT_ACCESS_TOKEN not available", async () => { delete process.env.CONTENTFUL_MANAGEMENT_ACCESS_TOKEN process.env.PRIVATE_KEY = "test-private-key" process.env.APP_ID = "test-app-id" process.env.SPACE_ID = "test-space-id" process.env.ENVIRONMENT_ID = "test-environment-id" process.env.CONTENTFUL_HOST = "api.contentful.com" const { getManagementToken } = await import("@contentful/node-apps-toolkit") const { createClient } = await import("contentful-management") vi.mocked(getManagementToken).mockResolvedValue("generated-token") const mockCreateClient = vi.fn() vi.mocked(createClient).mockImplementation(mockCreateClient) const { getContentfulClient } = await import("../../src/config/client") await getContentfulClient() expect(getManagementToken).toHaveBeenCalledWith( "-----BEGIN RSA PRIVATE KEY-----\ntest-private-key\n-----END RSA PRIVATE KEY-----", { appInstallationId: "test-app-id", spaceId: "test-space-id", environmentId: "test-environment-id", host: "https://api.contentful.com", }, ) expect(mockCreateClient).toHaveBeenCalledWith( { accessToken: "generated-token", host: "api.contentful.com", headers: { "X-Contentful-user-agent": "contentful-community-mcp/1.0.0", }, }, { type: "plain" }, ) }) it("includes MCP identification header in all client configurations", async () => { process.env.CONTENTFUL_MANAGEMENT_ACCESS_TOKEN = "test-token" process.env.CONTENTFUL_HOST = "api.contentful.com" const mockCreateClient = vi.fn() const { createClient } = await import("contentful-management") vi.mocked(createClient).mockImplementation(mockCreateClient) const { getContentfulClient } = await import("../../src/config/client") await getContentfulClient() const callArgs = mockCreateClient.mock.calls[0] const config = callArgs[0] expect(config.headers).toBeDefined() expect(config.headers["X-Contentful-user-agent"]).toBe("contentful-community-mcp/1.0.0") }) it("throws if neither CONTENTFUL_MANAGEMENT_ACCESS_TOKEN nor PRIVATE_KEY is available", async () => { delete process.env.CONTENTFUL_MANAGEMENT_ACCESS_TOKEN delete process.env.PRIVATE_KEY vi.resetModules() const { getContentfulClient } = await import("../../src/config/client") await expect(() => getContentfulClient()).rejects.toThrow( "No Contentful management token or private key found...", ) }) })

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/ivo-toby/contentful-mcp'

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