{"openapi":"3.1.0","info":{"title":"Science Fair API","version":"0.1.0","description":"Grade-appropriate science-fair project ideas across biology, chemistry, physics, earth science, and environmental science, each with a real filled-in hypothesis/variables/procedure, an interest/materials matcher, and a hypothesis-structure checker — all local.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://sciencefair.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/sciencefair/docs"},"termsOfService":"https://connectorbay.com/sciencefair/terms"},"servers":[{"url":"https://sciencefair.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/sciencefair/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_topics":{"post":{"operationId":"list_topics","summary":"Lists project topics, grade bands, and how many project ideas exist per topic.","description":"Lists project topics, grade bands, and how many project ideas exist per topic.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_topicsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/project_ideas":{"post":{"operationId":"project_ideas","summary":"Returns science-fair project ideas, each with a real hypothesis, variables, materials, procedure, and data/","description":"Returns science-fair project ideas, each with a real hypothesis, variables, materials, procedure, and data/\n    conclusion guidance, filtered by topic and/or grade band. Use for \"give me a middle school chemistry project\n    idea\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"biology | chemistry | physics | earth_science | environmental_science","title":"Topic"},"grade_band":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"elementary | middle | high","title":"Grade Band"},"count":{"default":3,"maximum":10,"minimum":1,"title":"Count","type":"integer"},"seed":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Fixed seed for reproducible selection.","title":"Seed"}},"title":"project_ideasArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_project":{"post":{"operationId":"get_project","summary":"Looks up a single project idea by id.","description":"Looks up a single project idea by id.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"A project id, e.g. 'bio-3' (from project_ideas).","title":"Project Id","type":"string"}},"required":["project_id"],"title":"get_projectArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/match_projects":{"post":{"operationId":"match_projects","summary":"Scores every project against given interests and (optionally) available materials and grade band, and","description":"Scores every project against given interests and (optionally) available materials and grade band, and\n    returns the best-ranked matches. Use for \"match a project to my interest in animals and the materials I have\n    at home\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"interests":{"description":"Keywords describing interests, e.g. ['animals', 'space'].","items":{"type":"string"},"maxItems":10,"minItems":1,"title":"Interests","type":"array"},"available_materials":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Materials on hand, e.g. ['vinegar', 'baking soda'].","title":"Available Materials"},"grade_band":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"elementary | middle | high","title":"Grade Band"},"count":{"default":3,"maximum":10,"minimum":1,"title":"Count","type":"integer"}},"required":["interests"],"title":"match_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/scientific_method_reference":{"post":{"operationId":"scientific_method_reference","summary":"Gives the generic 6-step scientific method, or — with a project_id — that project's own filled-in version","description":"Gives the generic 6-step scientific method, or — with a project_id — that project's own filled-in version\n    of every step. Use for \"what are the steps of the scientific method\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A project id to see its own filled-in steps; omit for the generic template.","title":"Project Id"}},"title":"scientific_method_referenceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/hypothesis_check":{"post":{"operationId":"hypothesis_check","summary":"Checks a hypothesis for the standard testable if/then/because structure, with specific feedback on what's","description":"Checks a hypothesis for the standard testable if/then/because structure, with specific feedback on what's\n    missing. Use for \"is this a good hypothesis: plants like sunlight\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"hypothesis_text":{"description":"A hypothesis to check.","examples":["If plants get more sunlight then they grow taller because of photosynthesis"],"title":"Hypothesis Text","type":"string"}},"required":["hypothesis_text"],"title":"hypothesis_checkArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}