simfinity.js/THE GRAPHQL FRAMEWORK
Define once.Build beyond.
Define your GraphQL types. Build on MongoDB or PostgreSQL
with generated queries, mutations, and optional MCP tools.
Download v3.7.0 startersOr install in your project:
npm i @simtlix/simfinity-js@3.7.0 graphql@^16.11.0 mongoose@^8.24.2Choose once when setting up your app. v3.7.0 is available on npm.
A type is just
the beginning.
One Barber app. Two database backends.
Explore a shop profile and its opening hours.
A shop starts with a type.
Start with a shop profile, then add its embedded opening hours.
import { GraphQLObjectType, GraphQLID,
GraphQLString, GraphQLNonNull } from 'graphql';
import * as simfinity from '@simtlix/simfinity-js';
// Connect Mongoose before registering types (see the quick start).
const barbershopType = new GraphQLObjectType({
name: 'barbershop',
fields: {
id: { type: GraphQLID },
name: { type: new GraphQLNonNull(GraphQLString) },
slug: { type: new GraphQLNonNull(GraphQLString) },
},
});
simfinity.connect(null, barbershopType, 'barbershop', 'barbershops');
export const schema = simfinity.createSchema();{
"data": {
"barbershops": [
{
"id": "507f1f77bcf86cd799439011",
"name": "Simfinity Barber Demo",
"slug": "barber-demo"
}
]
}
}One registration adds list, detail, aggregation and CRUD operations.
02 / BUILT AROUND YOUR DOMAIN
Less plumbing.
More possibility.
A connected foundation, with the freedom to make it your own.
A connection becomes a query.
barbershops { services { name price } }Relationships, already connected.
Embedded documents. References. Collections. Describe the connections in your domain and let Simfinity generate the resolvers.
barbershops { services { name price } }Connect your data Questions without the boilerplate.
Compose nested filters, logical expressions, sorting, pagination, and aggregations through a familiar GraphQL interface.
name: { operator: LIKE, value: "Barber" }Explore queries Your application. Your rules.
Bring authorization, validation, and query scopes into your schema. Control access with the context your application provides.
addservice: requireOwnerOrPlatformAdmin()Define your rules Convention meets your ambition.
Make room for what is unique. Lifecycle hooks, custom mutations, and state machines keep your business logic in your hands.
onSaving(doc, args, session, context)Make it yours 03 / A NEW WAY TO CONNECT
Your API.
Meet AI.
Your schema already knows your data.
Now your AI tools can, too. Generate typed MCP
tools from the same GraphQL API, on either database.
generateMCPTools(schema, {
schemaPlugins: [authPlugin],
selectionDepth: 0,
})Find approved shops with typed filters and pagination. Barber scopes decide which shops the caller can see.
{
"slug": {
"operator": "EQ",
"value": "barber-demo"
},
"pagination": {
"page": 1,
"size": 10
}
}GraphQL and MCP share Barber’s verified user context and rules.
A clear path.
At every step.
From the first query to the finer details.
Everything you need to keep building.