Skip to main content
Glama

Prisma MCP Server

Official
by prisma
Apache 2.0
4
44,210
  • Linux
  • Apple
schema-folder.test.ts6.88 kB
import { DbPull } from '../../commands/DbPull' import { createDefaultTestContext } from '../__helpers__/context' const isMacOrWindowsCI = Boolean(process.env.CI) && ['darwin', 'win32'].includes(process.platform) if (isMacOrWindowsCI) { jest.setTimeout(60_000) } const ctx = createDefaultTestContext() test('reintrospection - no changes', async () => { ctx.fixture('introspection-folder') const introspect = new DbPull() const result = introspect.parse(['--schema=./prisma/schema'], await ctx.config()) await expect(result).resolves.toMatchInlineSnapshot(`""`) expect(ctx.normalizedCapturedStdout()).toMatchInlineSnapshot(` "Prisma schema loaded from prisma/schema Datasource "my_db": SQLite database "dev.db" <location placeholder> - Introspecting based on datasource defined in prisma/schema ✔ Introspected 2 models and wrote them into prisma/schema in XXXms Run prisma generate to generate Prisma Client. " `) expect(ctx.printDir('prisma/schema', ['.prisma'])).toMatchInlineSnapshot(` "Blog.prisma: model Blog { id Int @id @default(autoincrement()) viewCount20 Int ownerId Int owner User @relation(fields: [ownerId], references: [id]) } config.prisma: generator client { provider = "prisma-client-js" output = "@prisma/client" } datasource my_db { provider = "sqlite" url = "file:../../dev.db" } User.prisma: model User { id Int @id @default(autoincrement()) blogs Blog[] } " `) }) test('reintrospection - with --print', async () => { ctx.fixture('introspection-folder') const introspect = new DbPull() const result = introspect.parse(['--schema=./prisma/schema', '--print'], await ctx.config()) await expect(result).resolves.toMatchInlineSnapshot(`""`) expect(ctx.normalizedCapturedStdout()).toMatchInlineSnapshot(` "// prisma/schema/Blog.prisma model Blog { id Int @id @default(autoincrement()) viewCount20 Int ownerId Int owner User @relation(fields: [ownerId], references: [id]) } // prisma/schema/config.prisma generator client { provider = "prisma-client-js" output = "@prisma/client" } datasource my_db { provider = "sqlite" url = "file:../../dev.db" } // prisma/schema/User.prisma model User { id Int @id @default(autoincrement()) blogs Blog[] } " `) }) test('reintrospection - new model', async () => { ctx.fixture('introspection-folder-new-model') const introspect = new DbPull() const result = introspect.parse(['--schema=./prisma/schema'], await ctx.config()) await expect(result).resolves.toMatchInlineSnapshot(`""`) expect(ctx.printDir('prisma/schema', ['.prisma'])).toMatchInlineSnapshot(` "config.prisma: generator client { provider = "prisma-client-js" output = "@prisma/client" } datasource my_db { provider = "sqlite" url = "file:../../dev.db" } introspected.prisma: model Blog { id Int @id @default(autoincrement()) viewCount20 Int ownerId Int User User @relation(fields: [ownerId], references: [id]) } User.prisma: model User { id Int @id @default(autoincrement()) Blog Blog[] } " `) }) test('reintrospection - new model - existing introspected.prisma', async () => { ctx.fixture('introspection-folder-new-model-with-introspected') const introspect = new DbPull() const result = introspect.parse(['--schema=./prisma/schema'], await ctx.config()) await expect(result).resolves.toMatchInlineSnapshot(`""`) expect(ctx.printDir('prisma/schema', ['.prisma'])).toMatchInlineSnapshot(` "config.prisma: generator client { provider = "prisma-client-js" output = "@prisma/client" } datasource my_db { provider = "sqlite" url = "file:../../dev.db" } introspected.prisma: model User { id Int @id @default(autoincrement()) Blog Blog[] } model Blog { id Int @id @default(autoincrement()) viewCount20 Int ownerId Int User User @relation(fields: [ownerId], references: [id]) } " `) }) test('reintrospection - new field', async () => { ctx.fixture('introspection-folder-new-field') const introspect = new DbPull() const result = introspect.parse(['--schema=./prisma/schema'], await ctx.config()) await expect(result).resolves.toMatchInlineSnapshot(`""`) expect(ctx.printDir('prisma/schema', ['.prisma'])).toMatchInlineSnapshot(` "Blog.prisma: model Blog { id Int @id @default(autoincrement()) viewCount20 Int ownerId Int owner User @relation(fields: [ownerId], references: [id]) } config.prisma: generator client { provider = "prisma-client-js" output = "@prisma/client" } datasource my_db { provider = "sqlite" url = "file:../../dev.db" } User.prisma: model User { id Int @id @default(autoincrement()) blogs Blog[] } " `) }) test('reintrospection - remove model', async () => { ctx.fixture('introspection-folder-remove-model') const introspect = new DbPull() const result = introspect.parse(['--schema=./prisma/schema'], await ctx.config()) await expect(result).resolves.toMatchInlineSnapshot(`""`) expect(ctx.printDir('prisma/schema', ['.prisma'])).toMatchInlineSnapshot(` "Blog.prisma: config.prisma: generator client { provider = "prisma-client-js" output = "@prisma/client" } datasource my_db { provider = "sqlite" url = "file:../../dev.db" } User.prisma: model User { id Int @id @default(autoincrement()) } " `) }) test('reintrospection - invalid schema with --force', async () => { ctx.fixture('introspection-folder-invalid') const introspect = new DbPull() const result = introspect.parse(['--schema=./prisma/schema', '--force'], await ctx.config()) await expect(result).resolves.toMatchInlineSnapshot(`""`) expect(ctx.printDir('prisma/schema', ['.prisma'])).toMatchInlineSnapshot(` "introspected.prisma: generator client { provider = "prisma-client-js" output = "@prisma/client" } datasource my_db { provider = "sqlite" url = "file:../../dev.db" } model Blog { id Int @id @default(autoincrement()) viewCount20 Int ownerId Int User User @relation(fields: [ownerId], references: [id]) } model User { id Int @id @default(autoincrement()) Blog Blog[] } " `) })

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/prisma/prisma'

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