MCP Server

Open Medici Public Fellowship and Grant Search

com.openmedici/public
Education Search & Research Public & reachable MCP 2025-11-25

What this MCP does

Searches and retrieves public fellowships, grants, scholarships, prizes, and funded residencies with eligibility and funding details.

get_opportunity
Get opportunity
Get one published public opportunity, its current cycles, source records, and any approved eligibility or funding facts before ranking or citing it. Missing facts remain unknown. Open Medici ranking is a catalog signal, not personalized fit, eligibility, or acceptance likelihood.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 200, 'minLength': 1}, 'locale': {'enum': ['en', 'es'], 'type': 'string', 'default': 'en'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['opportunity'], 'properties': {'opportunity': {'type': 'object', 'required': ['id', 'slug', 'name', 'organization', 'type', 'summary', 'fields', 'eligibleCountries', 'destinationCountries', 'careerStages', 'fundingMinUsd', 'fundingMaxUsd', 'nextDeadline', 'lifecycle', 'recordUrl', 'officialUrl', 'sourceCheckedAt', 'ranking', 'description', 'cycles', 'sources', 'opportunityFacts'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'type': {'type': 'string'}, 'cycles': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'opensOn', 'deadlineOn', 'applicationUrl', 'status'], 'properties': {'id': {'type': 'string'}, 'label': {'type': 'string'}, 'status': {'type': 'string'}, 'opensOn': {'type': ['string', 'null']}, 'deadlineOn': {'type': ['string', 'null']}, 'applicationUrl': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'fields': {'type': 'array', 'items': {'type': 'string'}}, 'ranking': {'type': 'object', 'required': ['position', 'tier', 'score', 'badge', 'reason'], 'properties': {'tier': {'enum': ['S', 'A', 'B', 'Unscored'], 'type': 'string'}, 'badge': {'type': ['string', 'null']}, 'score': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'reason': {'type': ['string', 'null']}, 'position': {'type': 'integer', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'title', 'publisher', 'publishedOn', 'retrievedAt', 'sourceCheckedAt'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'title': {'type': ['string', 'null']}, 'publisher': {'type': ['string', 'null']}, 'publishedOn': {'type': ['string', 'null']}, 'retrievedAt': {'type': 'string'}, 'sourceCheckedAt': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'summary': {'type': ['string', 'null']}, 'lifecycle': {'type': 'string'}, 'recordUrl': {'type': 'string', 'format': 'uri'}, 'description': {'type': ['string', 'null']}, 'officialUrl': {'type': 'string', 'format': 'uri'}, 'careerStages': {'type': 'array', 'items': {'type': 'string'}}, 'nextDeadline': {'type': ['string', 'null']}, 'organization': {'type': 'object', 'required': ['id', 'slug', 'name', 'pageAvailable'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'pageAvailable': {'type': 'boolean'}}, 'additionalProperties': False}, 'fundingMaxUsd': {'type': ['number', 'null']}, 'fundingMinUsd': {'type': ['number', 'null']}, 'sourceCheckedAt': {'type': ['string', 'null']}, 'opportunityFacts': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['key', 'precision', 'validity', 'checkedAt', 'freshThrough', 'evidence', 'kind', 'value'], 'properties': {'key': {'type': 'string'}, 'kind': {'type': 'string', 'const': 'funding'}, 'value': {'type': 'object', 'properties': {'scope': {'enum': ['per_recipient', 'per_project', 'cohort', 'total_pool'], 'type': 'string'}, 'amount': {'type': 'string', 'pattern': '^-?\\d+(?:\\.\\d+)?$', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}, 'amountMax': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}, 'amountMin': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}, 'usdAmount': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}, 'amountShape': {'enum': ['exact', 'minimum', 'maximum', 'range', 'estimated'], 'type': 'string'}, 'currencyCode': {'type': 'string'}, 'usdAmountMax': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}, 'usdAmountMin': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}, 'usdConvertedOn': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/validity/properties/from/anyOf/0'}, 'usdConversionRate': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}}, 'additionalProperties': False}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'locator', 'lastCheckedAt'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'locator': {'type': 'string'}, 'lastCheckedAt': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}}, 'additionalProperties': False}, 'minItems': 1}, 'validity': {'type': 'object', 'required': ['from', 'through'], 'properties': {'from': {'anyOf': [{'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, {'type': 'null'}]}, 'through': {'anyOf': [{'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/validity/properties/from/anyOf/0'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'checkedAt': {'type': 'string', 'format': 'date-time'}, 'precision': {'enum': ['exact', 'estimated', 'derived'], 'type': 'string'}, 'freshThrough': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['key', 'precision', 'validity', 'checkedAt', 'freshThrough', 'evidence', 'kind', 'value'], 'properties': {'key': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/key'}, 'kind': {'type': 'string', 'const': 'benefit'}, 'value': {'type': 'object', 'properties': {'text': {'type': 'string'}, 'benefitKind': {'enum': ['stipend', 'salary', 'tuition', 'travel', 'housing', 'insurance', 'research_budget', 'in_kind'], 'type': 'string'}}, 'additionalProperties': False}, 'evidence': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/evidence'}, 'validity': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/validity'}, 'checkedAt': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}, 'precision': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/precision'}, 'freshThrough': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['key', 'precision', 'validity', 'checkedAt', 'freshThrough', 'evidence', 'kind', 'value'], 'properties': {'key': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/key'}, 'kind': {'type': 'string', 'const': 'duration'}, 'value': {'type': 'object', 'properties': {'unit': {'enum': ['days', 'weeks', 'months', 'years', 'people', 'applications', 'percent'], 'type': 'string'}, 'number': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}, 'maximum': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}, 'minimum': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/value/properties/amount', 'description': 'A base-10 decimal serialized as a string to preserve precision.'}}, 'additionalProperties': False}, 'evidence': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/evidence'}, 'validity': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/validity'}, 'checkedAt': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}, 'precision': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/precision'}, 'freshThrough': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['key', 'precision', 'validity', 'checkedAt', 'freshThrough', 'evidence', 'kind', 'value'], 'properties': {'key': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/key'}, 'kind': {'type': 'string', 'const': 'milestone'}, 'value': {'type': 'object', 'properties': {'date': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/validity/properties/from/anyOf/0'}}, 'additionalProperties': False}, 'evidence': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/evidence'}, 'validity': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/validity'}, 'checkedAt': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}, 'precision': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/precision'}, 'freshThrough': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['key', 'precision', 'validity', 'checkedAt', 'freshThrough', 'evidence', 'kind', 'value'], 'properties': {'key': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/key'}, 'kind': {'type': 'string', 'const': 'statistic'}, 'value': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/2/properties/value'}, 'evidence': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/evidence'}, 'validity': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/validity'}, 'checkedAt': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}, 'precision': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/precision'}, 'freshThrough': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['key', 'precision', 'validity', 'checkedAt', 'freshThrough', 'evidence', 'kind', 'value'], 'properties': {'key': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/key'}, 'kind': {'type': 'string', 'const': 'eligibility'}, 'value': {'anyOf': [{'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/2/properties/value'}, {'type': 'object', 'properties': {'text': {'type': 'string'}, 'codes': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}]}, 'evidence': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/evidence'}, 'validity': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/validity'}, 'checkedAt': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}, 'precision': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/precision'}, 'freshThrough': {'$ref': '#/properties/opportunity/properties/opportunityFacts/items/anyOf/0/properties/checkedAt'}}, 'additionalProperties': False}]}}, 'eligibleCountries': {'type': 'array', 'items': {'type': 'string'}}, 'destinationCountries': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'additionalProperties': False}
list_filter_options
List filter options
List current database-backed values for one public search facet. Use this before search_opportunities instead of guessing taxonomy terms. An empty facet or absent user value means public coverage is missing; it is not evidence that the user is ineligible, so do not turn it into a hard exclusion. Map filters to facets as follows: type→types, topic→topics, applicant→applicants, career→careers, audience→audiences, education→education, enrollment→enrollments, citizenship→citizenships, residence→residences, country→countries, destination→destinations, benefit→benefits, fundingShape→fundingShapes, durationUnit→durationUnits, openState→openStates, lifecycle→lifecycles.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['facet'], 'properties': {'q': {'type': 'string', 'maxLength': 100}, 'facet': {'enum': ['types', 'lifecycles', 'fields', 'countries', 'destinations', 'careers', 'topics', 'applicants', 'audiences', 'benefits', 'citizenships', 'residences', 'education', 'enrollments', 'fundingShapes', 'durationUnits', 'openStates'], 'type': 'string', 'description': "Plural facet catalog name corresponding to a search filter; see this tool's description for the exact mapping."}, 'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 10000, 'minimum': 0}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['data', 'meta'], 'properties': {'data': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'count'], 'properties': {'count': {'type': 'integer'}, 'label': {'type': 'string'}, 'value': {'type': 'string'}}, 'additionalProperties': False}}, 'meta': {'type': 'object', 'required': ['facet', 'q', 'limit', 'offset', 'count', 'total'], 'properties': {'q': {'type': 'string'}, 'count': {'type': 'integer'}, 'facet': {'enum': ['types', 'lifecycles', 'fields', 'countries', 'destinations', 'careers', 'topics', 'applicants', 'audiences', 'benefits', 'citizenships', 'residences', 'education', 'enrollments', 'fundingShapes', 'durationUnits', 'openStates'], 'type': 'string'}, 'limit': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': False}}, 'additionalProperties': False}
search_opportunities
Search opportunities
Search published public fellowships, grants, scholarships, prizes, and funded residencies. For matching, start with separate broad calls for the exact topic, synonyms, broader fields, and type-only grants and fellowships. Do not stack sparse topic, career, and location filters during initial discovery. Array values are OR alternatives within one filter; separate filter fields are combined with AND. Search results are candidates only: call get_opportunity before ranking or citing each one.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'integer', 'default': 1, 'maximum': 10000, 'minimum': 1}, 'sort': {'enum': ['rank', 'deadline', 'name', 'recent'], 'type': 'string', 'default': 'rank'}, 'type': {'type': 'array', 'items': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="types". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 20, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Short topic, program, or funder query. Use separate calls for useful synonyms and broader fields.'}, 'topic': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="topics". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'ageMax': {'type': 'number', 'maximum': 150, 'minimum': 0}, 'ageMin': {'type': 'number', 'maximum': 150, 'minimum': 0}, 'career': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="careers". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'locale': {'enum': ['en', 'es'], 'type': 'string', 'default': 'en'}, 'benefit': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="benefits". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'country': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="countries". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'audience': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="audiences". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'openOnly': {'type': 'boolean'}, 'applicant': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="applicants". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'education': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="education". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'lifecycle': {'type': 'array', 'items': {'enum': ['active_accepting', 'active_between_cycles', 'active_no_applications', 'paused', 'ended', 'renamed_or_moved', 'inaccessible', 'unclear'], 'type': 'string'}, 'maxItems': 8, 'description': 'Use exact values returned by list_filter_options with facet="lifecycles". Multiple values are OR alternatives; different filter fields are combined with AND.'}, 'openState': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="openStates". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'residence': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="residences". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'deadlineTo': {'$ref': '#/properties/deadlineFrom'}, 'enrollment': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="enrollments". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'fundedOnly': {'type': 'boolean'}, 'fundingMax': {'type': 'number', 'maximum': 1000000000, 'minimum': 0}, 'fundingMin': {'type': 'number', 'maximum': 1000000000, 'minimum': 0}, 'citizenship': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="citizenships". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'destination': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="destinations". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}, 'durationMax': {'type': 'number', 'maximum': 100000, 'minimum': 0, 'description': 'Maximum opportunity duration in days.'}, 'durationMin': {'type': 'number', 'maximum': 100000, 'minimum': 0, 'description': 'Minimum opportunity duration in days.'}, 'rollingOnly': {'type': 'boolean'}, 'deadlineFrom': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'durationUnit': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Filter by the unit stored on duration facts; this does not change the day-based durationMin and durationMax fields.'}, 'fundingShape': {'type': 'array', 'items': {'$ref': '#/properties/type/items'}, 'maxItems': 20, 'description': 'Use exact values returned by list_filter_options with facet="fundingShapes". Multiple values are OR alternatives within this filter; different filter fields are combined with AND.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['opportunities', 'meta'], 'properties': {'meta': {'type': 'object', 'required': ['limit', 'offset', 'count', 'total', 'page', 'pages', 'sort'], 'properties': {'page': {'type': 'integer'}, 'sort': {'enum': ['rank', 'deadline', 'name', 'recent'], 'type': 'string'}, 'count': {'type': 'integer'}, 'limit': {'type': 'integer'}, 'pages': {'type': 'integer'}, 'total': {'type': 'integer'}, 'offset': {'type': 'integer'}}, 'additionalProperties': False}, 'opportunities': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'slug', 'name', 'organization', 'type', 'summary', 'fields', 'eligibleCountries', 'destinationCountries', 'careerStages', 'fundingMinUsd', 'fundingMaxUsd', 'nextDeadline', 'lifecycle', 'recordUrl', 'officialUrl', 'sourceCheckedAt', 'ranking'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'type': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string'}}, 'ranking': {'type': 'object', 'required': ['position', 'tier', 'score', 'badge', 'reason'], 'properties': {'tier': {'enum': ['S', 'A', 'B', 'Unscored'], 'type': 'string'}, 'badge': {'type': ['string', 'null']}, 'score': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}]}, 'reason': {'type': ['string', 'null']}, 'position': {'type': 'integer', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, 'summary': {'type': ['string', 'null']}, 'lifecycle': {'type': 'string'}, 'recordUrl': {'type': 'string', 'format': 'uri'}, 'officialUrl': {'type': 'string', 'format': 'uri'}, 'careerStages': {'type': 'array', 'items': {'type': 'string'}}, 'nextDeadline': {'type': ['string', 'null']}, 'organization': {'type': 'object', 'required': ['id', 'slug', 'name', 'pageAvailable'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'pageAvailable': {'type': 'boolean'}}, 'additionalProperties': False}, 'fundingMaxUsd': {'type': ['number', 'null']}, 'fundingMinUsd': {'type': ['number', 'null']}, 'sourceCheckedAt': {'type': ['string', 'null']}, 'eligibleCountries': {'type': 'array', 'items': {'type': 'string'}}, 'destinationCountries': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Added
list_filter_options
Sept. 17, 2026, 12:36 p.m.
Added
get_opportunity
Sept. 17, 2026, 12:36 p.m.
Added
search_opportunities
Sept. 17, 2026, 12:36 p.m.