{"servers":[{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.PILOTAAI/slotlock","description":"Calendars for AI agents: free/busy, next free slot, and bookings PostgreSQL never double-books.","title":"Slotlock","repository":{"url":"https://github.com/PILOTAAI/slotlock","source":"github"},"version":"0.1.0","websiteUrl":"https://slotlock.pylota.io","packages":[{"registryType":"oci","identifier":"ghcr.io/pilotaai/slotlock:0.1.0","runtimeHint":"docker","transport":{"type":"streamable-http","url":"http://localhost:{PORT}/mcp","headers":[{"description":"The bearer token the server was started with (SLOTLOCK_AUTH_TOKEN).","isRequired":true,"value":"Bearer {SLOTLOCK_AUTH_TOKEN}","isSecret":true,"variables":{"SLOTLOCK_AUTH_TOKEN":{"description":"The same value as the SLOTLOCK_AUTH_TOKEN environment variable.","isRequired":true,"isSecret":true}},"name":"Authorization"}]},"runtimeArguments":[{"description":"Publish the server on this machine's loopback interface only.","value":"127.0.0.1:{PORT}:{PORT}","variables":{"PORT":{"description":"The same value as the PORT environment variable.","isRequired":true,"format":"number","default":"8080"}},"type":"named","name":"-p"}],"packageArguments":[{"description":"Serve MCP and A2A over HTTP.","value":"serve","type":"positional"},{"description":"Apply the schema first (idempotent).","value":"--migrate","type":"positional"}],"environmentVariables":[{"description":"postgres:// URL of a PostgreSQL 16 database the container can reach, as a role that is not a superuser and has no BYPASSRLS: serve refuses one, since row-level security would not confine it. Without SLOTLOCK_MIGRATE_DATABASE_URL this role also applies the schema, so it must be able to create it.","isRequired":true,"isSecret":true,"name":"DATABASE_URL"},{"description":"Bearer token MCP and A2A clients must send: at least 32 random characters (openssl rand -hex 32).","isRequired":true,"isSecret":true,"name":"SLOTLOCK_AUTH_TOKEN"},{"description":"Signs pending write confirmations: at least 32 random characters, different from the token. Not needed when SLOTLOCK_CONFIRM_WRITES is none.","isRequired":true,"isSecret":true,"name":"SLOTLOCK_CONFIRMATION_SECRET"},{"description":"Port the server listens on inside the container.","format":"number","default":"8080","name":"PORT"},{"description":"postgres:// URL of the schema owner. When set, migration runs as this role and grants the DATABASE_URL role only what it needs at runtime.","isSecret":true,"name":"SLOTLOCK_MIGRATE_DATABASE_URL"},{"description":"Writes that wait for a person to confirm them: all, none, or a comma-separated list of slotlock_create_event, slotlock_update_event, slotlock_delete_event. Clients without MCP 2026-07-28 form elicitation have guarded writes refused.","default":"all","name":"SLOTLOCK_CONFIRM_WRITES"},{"description":"JSON array of weekly bookable-hours rules, e.g. [{\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR\",\"startMinutes\":540,\"durationMinutes\":480}]. Without rules no slot is ever offered.","name":"SLOTLOCK_AVAILABILITY"},{"description":"on: also serve the tools as a REST API under /v1, described by an OpenAPI 3.1 document at /openapi.json. Writes that wait for confirmation answer 428 there.","default":"off","name":"SLOTLOCK_REST_API"},{"description":"The tenant every request acts in.","default":"default","name":"SLOTLOCK_TENANT"}]}]},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-10-22T21:33:11.243983Z","publishedAt":"2026-10-22T21:33:11.243983Z","updatedAt":"2026-10-22T21:33:11.243983Z","isLatest":false}}},{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.PILOTAAI/slotlock","description":"Calendars for AI agents: free/busy, next free slot, and bookings PostgreSQL never double-books.","title":"Slotlock","repository":{"url":"https://github.com/PILOTAAI/slotlock","source":"github"},"version":"0.1.1","websiteUrl":"https://slotlock.pylota.io","packages":[{"registryType":"oci","identifier":"ghcr.io/pilotaai/slotlock:0.1.1","runtimeHint":"docker","transport":{"type":"streamable-http","url":"http://localhost:{PORT}/mcp","headers":[{"description":"The bearer token the server was started with (SLOTLOCK_AUTH_TOKEN).","isRequired":true,"value":"Bearer {SLOTLOCK_AUTH_TOKEN}","isSecret":true,"variables":{"SLOTLOCK_AUTH_TOKEN":{"description":"The same value as the SLOTLOCK_AUTH_TOKEN environment variable.","isRequired":true,"isSecret":true}},"name":"Authorization"}]},"runtimeArguments":[{"description":"Publish the server on this machine's loopback interface only.","value":"127.0.0.1:{PORT}:{PORT}","variables":{"PORT":{"description":"The same value as the PORT environment variable.","isRequired":true,"format":"number","default":"8080"}},"type":"named","name":"-p"}],"packageArguments":[{"description":"Serve MCP and A2A over HTTP.","value":"serve","type":"positional"},{"description":"Apply the schema first (idempotent).","value":"--migrate","type":"positional"}],"environmentVariables":[{"description":"postgres:// URL of a PostgreSQL 16 database the container can reach, as a role that is not a superuser and has no BYPASSRLS: serve refuses one, since row-level security would not confine it. Without SLOTLOCK_MIGRATE_DATABASE_URL this role also applies the schema, so it must be able to create it.","isRequired":true,"isSecret":true,"name":"DATABASE_URL"},{"description":"Bearer token MCP and A2A clients must send: at least 32 random characters (openssl rand -hex 32).","isRequired":true,"isSecret":true,"name":"SLOTLOCK_AUTH_TOKEN"},{"description":"Signs pending write confirmations: at least 32 random characters, different from the token. Not needed when SLOTLOCK_CONFIRM_WRITES is none.","isRequired":true,"isSecret":true,"name":"SLOTLOCK_CONFIRMATION_SECRET"},{"description":"Port the server listens on inside the container.","format":"number","default":"8080","name":"PORT"},{"description":"postgres:// URL of the schema owner. When set, migration runs as this role and grants the DATABASE_URL role only what it needs at runtime.","isSecret":true,"name":"SLOTLOCK_MIGRATE_DATABASE_URL"},{"description":"Writes that wait for a person to confirm them: all, none, or a comma-separated list of slotlock_create_event, slotlock_update_event, slotlock_delete_event. Clients without MCP 2026-07-28 form elicitation have guarded writes refused.","default":"all","name":"SLOTLOCK_CONFIRM_WRITES"},{"description":"JSON array of weekly bookable-hours rules, e.g. [{\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR\",\"startMinutes\":540,\"durationMinutes\":480}]. Without rules no slot is ever offered.","name":"SLOTLOCK_AVAILABILITY"},{"description":"on: also serve the tools as a REST API under /v1, described by an OpenAPI 3.1 document at /openapi.json. Writes that wait for confirmation answer 428 there.","default":"off","name":"SLOTLOCK_REST_API"},{"description":"The tenant every request acts in.","default":"default","name":"SLOTLOCK_TENANT"}]}]},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-10-22T22:49:30.650616Z","publishedAt":"2026-10-22T22:49:30.650616Z","updatedAt":"2026-10-22T22:49:30.650616Z","isLatest":false}}},{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.PILOTAAI/slotlock","description":"Calendars for AI agents: free/busy, next free slot, and bookings PostgreSQL never double-books.","title":"Slotlock","repository":{"url":"https://github.com/PILOTAAI/slotlock","source":"github"},"version":"0.2.0","websiteUrl":"https://slotlock.pylota.io","packages":[{"registryType":"oci","identifier":"ghcr.io/pilotaai/slotlock:0.2.0","runtimeHint":"docker","transport":{"type":"streamable-http","url":"http://localhost:{PORT}/mcp","headers":[{"description":"The bearer token the server was started with (SLOTLOCK_AUTH_TOKEN).","isRequired":true,"value":"Bearer {SLOTLOCK_AUTH_TOKEN}","isSecret":true,"variables":{"SLOTLOCK_AUTH_TOKEN":{"description":"The same value as the SLOTLOCK_AUTH_TOKEN environment variable.","isRequired":true,"isSecret":true}},"name":"Authorization"}]},"runtimeArguments":[{"description":"Publish the server on this machine's loopback interface only.","value":"127.0.0.1:{PORT}:{PORT}","variables":{"PORT":{"description":"The same value as the PORT environment variable.","isRequired":true,"format":"number","default":"8080"}},"type":"named","name":"-p"}],"packageArguments":[{"description":"Serve MCP and A2A over HTTP.","value":"serve","type":"positional"},{"description":"Apply the schema first (idempotent).","value":"--migrate","type":"positional"}],"environmentVariables":[{"description":"postgres:// URL of a PostgreSQL 16 database the container can reach, as a role that is not a superuser and has no BYPASSRLS: serve refuses one, since row-level security would not confine it. Without SLOTLOCK_MIGRATE_DATABASE_URL this role also applies the schema, so it must be able to create it.","isRequired":true,"isSecret":true,"name":"DATABASE_URL"},{"description":"Bearer token MCP and A2A clients must send: at least 32 random characters (openssl rand -hex 32).","isRequired":true,"isSecret":true,"name":"SLOTLOCK_AUTH_TOKEN"},{"description":"Signs pending write confirmations: at least 32 random characters, different from the token. Not needed when SLOTLOCK_CONFIRM_WRITES is none.","isRequired":true,"isSecret":true,"name":"SLOTLOCK_CONFIRMATION_SECRET"},{"description":"Port the server listens on inside the container.","format":"number","default":"8080","name":"PORT"},{"description":"postgres:// URL of the schema owner. When set, migration runs as this role and grants the DATABASE_URL role only what it needs at runtime.","isSecret":true,"name":"SLOTLOCK_MIGRATE_DATABASE_URL"},{"description":"Writes that wait for a person to confirm them: all, none, or a comma-separated list of slotlock_create_event, slotlock_update_event, slotlock_delete_event. Clients without MCP 2026-07-28 form elicitation have guarded writes refused.","default":"all","name":"SLOTLOCK_CONFIRM_WRITES"},{"description":"JSON array of weekly bookable-hours rules, e.g. [{\"rrule\":\"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR\",\"startMinutes\":540,\"durationMinutes\":480}]. Without rules no slot is ever offered.","name":"SLOTLOCK_AVAILABILITY"},{"description":"on: also serve the tools as a REST API under /v1, and the application API (resources, bookable hours, holds, reservations, coverage, maintenance) for admin keys, described by an OpenAPI 3.1 document at /openapi.json. Writes that wait for confirmation answer 428 there. off: MCP and A2A only.","default":"on","name":"SLOTLOCK_REST_API"},{"description":"The tenant every request acts in.","default":"default","name":"SLOTLOCK_TENANT"}]}]},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-10-23T18:06:16.499219Z","publishedAt":"2026-10-23T18:06:16.499219Z","updatedAt":"2026-10-23T18:06:16.499219Z","isLatest":true}}}],"metadata":{"count":3}}
