{"record":{"id":"3f392636db02fc69","repo":"paperclipai/paperclip","slug":"adapter-type-does-not-provide-a-config-schema","errorCode":null,"errorMessage":"Adapter \"${type}\" does not provide a config schema.","messagePattern":"Adapter \"(.+?)\" does not provide a config schema\\.","errorType":"http","errorClass":null,"httpStatus":404,"severity":"error","filePath":"server/src/routes/adapters.ts","lineNumber":733,"sourceCode":"  // so the UI receives a fully hydrated schema in a single fetch.\n  const configSchemaCache = new Map<string, {\n    adapter: ServerAdapterModule;\n    schema: AdapterConfigSchema;\n    fetchedAt: number;\n  }>();\n  const CONFIG_SCHEMA_TTL_MS = 30_000;\n\n  router.get(\"/adapters/:type/config-schema\", async (req, res) => {\n    // Config schemas are read-only form metadata used when org members create\n    // or edit agents; they do not install or execute new adapter code.\n    assertBoardOrgAccess(req);\n    const { type } = req.params;\n\n    const adapter = findActiveServerAdapter(type);\n    if (!adapter) {\n      res.status(404).json({ error: `Adapter \"${type}\" is not registered.` });\n      return;\n    }\n    if (!adapter.getConfigSchema) {\n      res.status(404).json({ error: `Adapter \"${type}\" does not provide a config schema.` });\n      return;\n    }\n\n    const cached = configSchemaCache.get(type);\n    if (cached && cached.adapter === adapter && Date.now() - cached.fetchedAt < CONFIG_SCHEMA_TTL_MS) {\n      res.json(cached.schema);\n      return;\n    }\n\n    try {\n      const schema = await adapter.getConfigSchema();\n      configSchemaCache.set(type, { adapter, schema, fetchedAt: Date.now() });\n      res.json(schema);\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      logger.error({ err, type }, \"Failed to resolve config schema\");","sourceCodeStart":715,"sourceCodeEnd":751,"githubUrl":"https://github.com/paperclipai/paperclip/blob/5716fe907e596ce73501408fc6efdb19fb61edf2/server/src/routes/adapters.ts#L715-L751","documentation":"Capability guard on the config-schema route: the adapter is registered but does not implement getConfigSchema(), so it declares no UI form schema; the route returns 404 to signal that schema-driven forms are unavailable for this type.","triggerScenarios":"Thrown at server/src/routes/adapters.ts:675 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["This adapter exposes no config schema; configure it via its own files or choose an adapter with a schema."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5716fe907e596ce73501408fc6efdb19fb61edf2","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}