brapi-mcp-server
이 MCP로 할 수 있는 일
Connects to BrAPI breeding databases to query studies, germplasm, observations, traits, variants, genotypes, images, pedigrees, and analytical dataframes.
도구
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['studies'], 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'shape': {'enum': ['wide', 'long'], 'type': 'string', 'default': 'wide', 'description': 'Matrix shape. `wide` â\x80\x94 one row per germplasm, one column per variable, cell = aggregated value. `long` â\x80\x94 one row per observation with columns: germplasmDbId, observationVariableDbId, studyDbId, value, replicateIndex. When `aggregate:"all"` is combined with `shape:"wide"`, the output falls back to long form with a replicateIndex column.'}, 'studies': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'studyDbIds to include in the matrix. At least one is required â\x80\x94 the tool is study-anchored to avoid full-table scans.'}, 'aggregate': {'enum': ['mean', 'median', 'first', 'all'], 'type': 'string', 'default': 'mean', 'description': 'How to aggregate replicate observations (multiple readings of the same variable on the same germplasm). `mean` and `median` attempt numeric conversion and skip non-numeric values (e.g. categorical traits). `first` keeps the first value seen. `all` keeps every replicate as a separate row (produces long-form output even when shape is "wide"). Default: `mean`.'}, 'germplasm': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional subset of germplasmDbIds to include. Omit to include all germplasm found in the queried studies.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'variables': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional subset of observationVariableDbIds to include. Omit to include all variables found in the queried studies.'}, 'extraFilters': {'type': 'object', 'description': 'Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'studies', 'shape', 'aggregate', 'observationCount', 'germplasmCount', 'variableCount', 'variableLegend', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Per-study observation cap that was applied.', 'exclusiveMinimum': 0}, 'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'all_filters_dropped', 'no_observation_path'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `all_filters_dropped`: The active dialect dropped every filter supplied â\x80\x94 the call would silently widen to the unfiltered baseline. `no_observation_path`: Neither /observations nor /observationunits returned data for any requested study after probing both paths. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shape': {'enum': ['wide', 'long'], 'type': 'string', 'description': 'Matrix shape â\x80\x94 wide (one row per germplasm, one column per variable) or long (one row per observation).'}, 'shown': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Observations collected across all studies after filtering.'}, 'notice': {'type': 'string', 'description': 'Guidance for reaching the observations this call left out.'}, 'studies': {'type': 'array', 'items': {'type': 'string'}, 'description': 'studyDbIds that were queried to build the matrix.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (empty studies, non-numeric aggregation skips, fallback paths).'}, 'aggregate': {'enum': ['mean', 'median', 'first', 'all'], 'type': 'string', 'description': 'Aggregation applied to replicate observations (wide shape only). `all` keeps one row per replicate.'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Canvas dataframe handle for the materialized matrix. Omitted when no observations were found. Query with brapi_dataframe_query (SQL). Long-form columns: germplasmDbId, observationVariableDbId, studyDbId, value, replicateIndex. Wide-form columns: germplasmDbId, germplasmName, one column per variable (SQL-safe identifier derived from observationVariableDbId â\x80\x94 see variableLegend).', 'additionalProperties': False}, 'truncated': {'type': 'boolean', 'description': 'True when at least one study saturated the per-study loadLimit.'}, 'variableCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of distinct observation variables in the matrix.'}, 'germplasmCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of distinct germplasm in the matrix.'}, 'variableLegend': {'type': 'object', 'description': 'Mapping of safe column identifier â\x86\x92 observationVariableName. Wide-matrix column names are SQL-safe identifiers derived from observationVariableDbId (sanitized for DuckDB); consult this map to resolve a column back to its variable display name.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'observationCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total raw observations collected before pivoting.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'auth': {'oneOf': [{'type': 'object', 'required': ['mode'], 'properties': {'mode': {'type': 'string', 'const': 'none', 'description': 'No authentication.'}}, 'description': 'No-auth variant â\x80\x94 public BrAPI endpoints.'}, {'type': 'object', 'required': ['mode', 'token'], 'properties': {'mode': {'type': 'string', 'const': 'bearer', 'description': 'Pre-obtained bearer token.'}, 'token': {'type': 'string', 'minLength': 1, 'description': 'Pre-obtained access token, sent verbatim with each BrAPI request.'}}, 'description': 'Bearer-token variant â\x80\x94 caller already has an access token.'}, {'type': 'object', 'required': ['mode', 'apiKey'], 'properties': {'mode': {'type': 'string', 'const': 'api_key', 'description': 'Static API key in a custom header.'}, 'apiKey': {'type': 'string', 'minLength': 1, 'description': 'API key issued by the BrAPI server.'}, 'headerName': {'type': 'string', 'description': 'HTTP header to send the API key in. Defaults to `Authorization`.'}}, 'description': 'API-key variant â\x80\x94 static key sent in a configurable header.'}, {'type': 'object', 'required': ['mode', 'username', 'password'], 'properties': {'mode': {'type': 'string', 'const': 'sgn', 'description': 'Breedbase/SGN username+password; exchanged for a bearer token at /token.'}, 'password': {'type': 'string', 'minLength': 1, 'description': 'Password for the SGN/Breedbase username supplied above.'}, 'username': {'type': 'string', 'minLength': 1, 'description': 'SGN account username.'}}, 'description': 'SGN variant â\x80\x94 username/password exchanged at /token for a session bearer.'}, {'type': 'object', 'required': ['mode', 'clientId', 'clientSecret'], 'properties': {'mode': {'type': 'string', 'const': 'oauth2', 'description': 'OAuth2 client-credentials flow; exchanged for an access token at connect time.'}, 'clientId': {'type': 'string', 'minLength': 1, 'description': 'OAuth2 client identifier registered with the upstream IdP.'}, 'tokenUrl': {'type': 'string', 'description': 'OAuth2 token endpoint (absolute URL). Defaults derived from the base URL when omitted.'}, 'clientSecret': {'type': 'string', 'minLength': 1, 'description': 'OAuth2 client secret paired with the clientId.'}}, 'description': 'OAuth2 client-credentials variant.'}], 'description': 'Auth payload. Omit to use credentials configured server-side for this alias (or no auth when none are configured).'}, 'alias': {'type': 'string', 'default': 'default', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Alias for this connection. Use distinct aliases to register multiple BrAPI servers in one session.'}, 'baseUrl': {'type': 'string', 'description': 'BrAPI v2 base URL (absolute URL) including any path prefix â\x80\x94 e.g. https://test-server.brapi.org/brapi/v2. Omit to use the configured default for this alias.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'baseUrl', 'server', 'auth', 'capabilities', 'dialect', 'content', 'nextToolSuggestions', 'notes', 'fetchedAt']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'auth': {'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['none', 'sgn', 'oauth2', 'api_key', 'bearer'], 'type': 'string', 'description': 'Auth mode of the active connection.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 token-expiry timestamp, when known.'}, 'headerName': {'type': 'string', 'description': 'HTTP header carrying credentials.'}}, 'description': 'Auth summary for the active connection.', 'additionalProperties': False}, 'alias': {'type': 'string', 'description': 'Connection alias.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['auth_session_required', 'auth_base_url_mismatch', 'alias_base_url_unset', 'auth_token_exchange_failed', 'auth_no_access_token', 'upstream_unauthorized', 'upstream_forbidden'], 'description': 'Machine-readable failure mode. Declared by this tool: `auth_session_required`: Caller-supplied credentials on an HTTP deployment without per-user auth, from a request that carries no MCP session. `auth_base_url_mismatch`: The alias has server-configured credentials and the supplied baseUrl differs from the server configured for it. `alias_base_url_unset`: The alias has server-configured credentials but no base URL of its own (no BRAPI_<ALIAS>_BASE_URL and no enabled built-in), so they pair with no server. `auth_token_exchange_failed`: SGN or OAuth token exchange against the BrAPI /token endpoint failed. `auth_no_access_token`: Token endpoint responded but did not return an access_token. `upstream_unauthorized`: The server answered HTTP 401 on /serverinfo or /calls â\x80\x94 it requires login for capability discovery. `upstream_forbidden`: The server answered HTTP 403 on /serverinfo or /calls â\x80\x94 the request (anonymous or credentialed) lacks read access. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notes': {'type': 'array', 'items': {'type': 'string', 'description': 'Server-specific quirk or degradation note.'}, 'description': 'Server-specific quirks or degradation notes.'}, 'server': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Server display name from /serverinfo.'}, 'description': {'type': 'string', 'description': 'Free-form server description.'}, 'brapiVersion': {'type': 'string', 'description': 'Highest BrAPI version the server reports.'}, 'contactEmail': {'type': 'string', 'description': 'Contact email for the operator.'}, 'organizationURL': {'type': 'string', 'description': 'Organization website.'}, 'documentationURL': {'type': 'string', 'description': 'Documentation URL for this server.'}, 'organizationName': {'type': 'string', 'description': 'Hosting organization.'}}, 'description': 'Normalized server identity block.', 'additionalProperties': False}, 'baseUrl': {'type': 'string', 'description': 'BrAPI v2 base URL for this connection.'}, 'content': {'type': 'object', 'required': ['crops'], 'properties': {'crops': {'type': 'array', 'items': {'type': 'string', 'description': 'Common crop name as returned by /commoncropnames.'}, 'description': 'Crops the server declares via /commoncropnames.'}, 'studyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total studies hosted, when the server exposes a cheap count.'}, 'programCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total programs hosted, when the server exposes a cheap count.'}, 'locationCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total locations hosted, when the server exposes a cheap count.'}, 'germplasmCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total germplasm hosted, when the server exposes a cheap count.'}}, 'description': 'Content summary (crops + optional totals).', 'additionalProperties': False}, 'dialect': {'type': 'object', 'required': ['id', 'source', 'envVar', 'disabledSearchEndpoints', 'notes'], 'properties': {'id': {'type': 'string', 'description': 'Active dialect id (e.g. "spec", "cassavabase"). Names a registered adapter that translates outbound filters and declares known-dead routes.'}, 'notes': {'type': 'array', 'items': {'type': 'string', 'description': 'Verified compatibility note exposed by the active dialect.'}, 'description': 'Dialect-level compatibility notes for this server family.'}, 'envVar': {'type': 'string', 'description': 'Env var that pins the dialect for this alias (e.g. BRAPI_DEFAULT_DIALECT) when detection misfires.'}, 'source': {'enum': ['env-override', 'url-pattern', 'server-name', 'organization-name', 'fallback'], 'type': 'string', 'description': 'Where the dialect id came from: env-var override, URL host match, /serverinfo serverName, organizationName, or the spec passthrough fallback.'}, 'inferredMappingCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of filter translations inferred from naming conventions but not independently verified. A non-zero count means some result narrowing on this server may not fire as expected.'}, 'verifiedMappingCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of filter translations the dialect has empirically verified against a live server. Higher means more confidence in the translation table.'}, 'disabledSearchEndpoints': {'type': 'array', 'items': {'type': 'string', 'description': 'A POST /search/{noun} route the dialect routes around.'}, 'description': 'POST /search nouns the active dialect treats as known-dead. Tools using these routes will refuse with a recovery hint.'}}, 'description': 'Active dialect adapter â\x80\x94 translates outbound filters and declares known-dead routes for this server.', 'additionalProperties': False}, 'fetchedAt': {'type': 'string', 'description': 'ISO 8601 timestamp of when this envelope was composed.'}, 'attribution': {'type': 'object', 'required': ['homepage', 'license', 'citation'], 'properties': {'isDemo': {'type': 'boolean', 'description': 'True when this server hosts demo / sample data, not production records.'}, 'license': {'type': 'string', 'description': 'License under which the upstream dataset is published (e.g. "CC-BY").'}, 'citation': {'type': 'string', 'description': 'Citation requested by the upstream when data is reused in publications.'}, 'homepage': {'type': 'string', 'description': 'Public homepage of the upstream dataset.'}}, 'description': 'Attribution metadata for built-in known-server connections. Absent for custom (env-only) connections.', 'additionalProperties': False}, 'capabilities': {'type': 'object', 'required': ['supportedCount', 'supported', 'notableGaps'], 'properties': {'supported': {'type': 'array', 'items': {'type': 'string', 'description': 'BrAPI service name (e.g. "studies", "search/germplasm").'}, 'description': 'Sorted list of supported service names.'}, 'notableGaps': {'type': 'array', 'items': {'type': 'string', 'description': 'Common-floor service the server does not expose.'}, 'description': 'Common-floor services this server does NOT expose.'}, 'supportedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total distinct services the server advertises in /calls.'}}, 'description': 'Capability profile derived from /serverinfo.', 'additionalProperties': False}, 'nextToolSuggestions': {'type': 'array', 'items': {'type': 'object', 'required': ['toolName', 'reason', 'args'], 'properties': {'args': {'type': 'object', 'required': ['alias'], 'properties': {'alias': {'type': 'string', 'description': 'Connection alias to pass to the suggested tool.'}}, 'description': 'Arguments to call the tool with. Alias only â\x80\x94 narrow further with the tool filters.', 'additionalProperties': False}, 'reason': {'type': 'string', 'description': 'Why this tool applies to the connected server.'}, 'toolName': {'enum': ['brapi_find_studies', 'brapi_find_germplasm', 'brapi_find_variables', 'brapi_find_locations'], 'type': 'string', 'description': 'Entry-point finder tool this server can serve.'}}, 'description': 'A finder the connected server supports, with the arguments to start it.', 'additionalProperties': False}, 'description': 'Entry-point finders (studies, germplasm, variables, locations â\x80\x94 in that order) whose GET or POST /search route this server exposes under the active dialect. Empty when none apply.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'dataframe': {'type': 'string', 'minLength': 1, 'description': 'When set, return only the named dataframe. Omit to list all dataframes.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['tables']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['list_all_disabled_on_shared_http'], 'description': "Machine-readable failure mode. Declared by this tool: `list_all_disabled_on_shared_http`: This server is running as a shared HTTP endpoint without per-caller auth â\x80\x94 listing every dataframe would expose other concurrent clients' workspaces, since all callers resolve to one shared tenant. Other values are possible when a failure originates below the handler."}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'tables': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'rowCount', 'columns'], 'properties': {'name': {'type': 'string', 'description': 'Dataframe name. Use this in SQL queries.'}, 'columns': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'Column name.'}, 'type': {'type': 'string', 'description': 'SQL column type (VARCHAR, INTEGER, DOUBLE, BOOLEAN, etc.).'}, 'nullable': {'type': 'boolean', 'description': 'True when NULL values are allowed.'}}, 'description': 'Column declaration.', 'additionalProperties': False}, 'description': 'Schema in declaration order.'}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows currently registered.'}, 'provenance': {'type': 'object', 'required': ['source', 'baseUrl', 'query', 'createdAt', 'expiresAt'], 'properties': {'query': {'description': 'Original filter map / search body.'}, 'source': {'type': 'string', 'description': 'Tool/operation that produced the dataframe (e.g. find_observations).'}, 'baseUrl': {'type': 'string', 'description': 'BrAPI base URL the rows were pulled from.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 dataframe creation time.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 expiry â\x80\x94 when the dataframe metadata will be evicted.'}}, 'description': 'Originating-source provenance â\x80\x94 present only for auto-registered dataframes (`df_*`).', 'additionalProperties': False}, 'approxSizeBytes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Approximate size in bytes.'}}, 'description': 'Dataframe description.', 'additionalProperties': False}, 'description': 'All described dataframes.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['sql'], 'properties': {'sql': {'type': 'string', 'minLength': 1, 'description': 'SELECT statement against dataframes. Single statement only â\x80\x94 writes, DDL, file reads, and exports are rejected. Use brapi_dataframe_describe to discover available dataframes. SQL is the primary paging idiom: use `LIMIT/OFFSET` to walk a large dataframe, projection to trim columns, and aggregation (`COUNT`, `GROUP BY`, `AVG`) to summarize without materializing every row.'}, 'preview': {'type': 'integer', 'maximum': 1000, 'description': 'Cap the number of rows returned in this response (1â\x80\x931000). When omitted, the deployment-wide response cap applies. Lower this with `registerAs` when you only need a sample to verify the query.', 'exclusiveMinimum': 0}, 'rowLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Hard cap on rows materialized into the response, bounded by the deployment-wide response cap. For larger result sets, use `registerAs` to keep the full result queryable instead of raising this.', 'exclusiveMinimum': 0}, 'registerAs': {'type': 'string', 'pattern': '^[A-Za-z_][A-Za-z0-9_]{0,62}$', 'description': 'Persist the result as a new dataframe under this name. The response still returns at most `preview` rows; the full result remains queryable as a new dataframe. Conflicts with an existing dataframe name fail â\x80\x94 drop first via brapi_dataframe_drop. Identifier rules: letters, digits, and underscores; must start with a letter or underscore; max 63 characters.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['rowCount', 'columns', 'rows']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Row ceiling that bound the response (the smaller of preview and rowLimit).', 'exclusiveMinimum': 0}, 'rows': {'type': 'array', 'items': {'type': 'object', 'description': 'One result row. Columns are projected from the SQL SELECT clause; call brapi_dataframe_describe to inspect source dataframe schemas.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Materialized rows, bounded by preview/rowLimit.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['sql_rejected'], 'description': 'Machine-readable failure mode. Declared by this tool: `sql_rejected`: SQL violated read-only rules (multi-statement, non-SELECT, or disallowed operation). Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows materialized into `rows`.'}, 'notice': {'type': 'string', 'description': 'Guidance for reaching the rows this response left out.'}, 'columns': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'Column name in projection order.'}, 'type': {'type': 'string', 'description': 'SQL/DuckDB column type (e.g. VARCHAR, BIGINT, DOUBLE, BOOLEAN, JSON) sourced from DuckDB schema metadata. The same type appears whether or not `registerAs` was supplied â\x80\x94 without it, the handler runs an internal probe to recover authoritative types that would otherwise be lost when DuckDB BigInts serialize to JSON strings.'}}, 'description': 'One column descriptor â\x80\x94 name and SQL/DuckDB type.', 'additionalProperties': False}, 'description': 'Column metadata in projection order â\x80\x94 name and SQL type. Use this to write follow-up queries without round-tripping through brapi_dataframe_describe.'}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows the query produced (may exceed `rows.length` when capped).'}, 'dataframe': {'type': 'string', 'description': 'Name of the dataframe holding the full result, populated when `registerAs` was supplied. Reference this name in follow-up queries.'}, 'truncated': {'type': 'boolean', 'description': 'True when the response carries fewer rows than the query produced.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['endpoint'], 'properties': {'endpoint': {'enum': ['germplasm', 'images', 'locations', 'observations', 'studies', 'variables', 'variants'], 'type': 'string', 'description': 'BrAPI endpoint to describe filters for.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['endpoint', 'filterCount', 'filters', 'availableEndpoints']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_endpoint'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_endpoint`: No filter catalog is registered for the requested endpoint. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'filters': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type', 'description', 'example'], 'properties': {'name': {'type': 'string', 'description': 'Filter parameter name (as accepted by the BrAPI endpoint).'}, 'type': {'enum': ['string', 'integer', 'number', 'boolean', 'date', 'string[]', 'integer[]'], 'type': 'string', 'description': 'Expected value type.'}, 'example': {'type': 'string', 'description': 'Example value (stringified).'}, 'description': {'type': 'string', 'description': 'Short description of what the filter does.'}}, 'description': 'One filter entry â\x80\x94 name, type, description, and an example value.', 'additionalProperties': False}, 'description': 'Filter catalog entries.'}, 'endpoint': {'type': 'string', 'description': 'The endpoint the filters apply to.'}, 'filterCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of filters in the catalog.'}, 'specReference': {'type': 'string', 'description': 'Pointer to the BrAPI v2 spec section for this endpoint.'}, 'availableEndpoints': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Every endpoint this tool can describe â\x80\x94 useful for discovery.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['variantSetDbId', 'format'], 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'format': {'enum': ['plink', 'vcf-lite', 'matrix-json'], 'type': 'string', 'description': 'Output format. `matrix-json` registers a wide canvas dataframe only. `vcf-lite` returns VCF-subset text and registers the dataframe. `plink` returns .ped/.map text and registers the dataframe.'}, 'maxCalls': {'type': 'integer', 'maximum': 500000, 'description': 'Lower the pull cap for this call. Omit to use the deployment ceiling (BRAPI_GENOTYPE_CALLS_MAX_PULL). Cannot raise it: a value above the deployment ceiling is clamped down to it and the effective cap is reported in `warnings`.', 'exclusiveMinimum': 0}, 'maxColumns': {'type': 'integer', 'maximum': 500000, 'description': 'Lower the distinct-variant column cap for this call. Omit to use the deployment ceiling (BRAPI_GENOTYPE_MATRIX_MAX_COLUMNS). Cannot raise it: a value above the deployment ceiling is clamped down to it. When the variant set resolves more distinct variants than the effective cap, the matrix is capped at that many variant columns, `truncated` is set, and the effective cap is reported in `warnings`. Independent of `maxCalls`, which bounds the row (call) pull.', 'exclusiveMinimum': 0}, 'germplasmDbIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Restrict to these germplasm. Omit to pull all germplasm in the variant set (use with caution on large sets).'}, 'variantSetDbId': {'type': 'string', 'minLength': 1, 'description': 'Variant set to pull calls for. Required.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'format', 'rowCount', 'columnCount', 'variantColumnLegend', 'callFormatting', 'dataframe', 'truncated', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'map': {'type': 'string', 'description': 'PLINK .map text â\x80\x94 chromosome, variant-id, genetic-distance (0 placeholder), base-pair position, one row per variant. Present only when format="plink". Chromosome/position come from /variants metadata; `0` when absent.'}, 'ped': {'type': 'string', 'description': 'PLINK .ped text â\x80\x94 FID IID PAT MAT SEX PHENO placeholders (all 0) followed by biallelic genotype pairs per variant, one row per sample. Present only when format="plink". Alleles are passed through verbatim; PLINK missing is `0`.'}, 'vcf': {'type': 'string', 'description': 'VCF-lite text â\x80\x94 header `#CHROM POS ID REF ALT` plus one genotype column per sample, one row per variant. Present only when format="vcf-lite". CHROM/POS/REF/ALT come from /variants metadata; "." when the server does not provide them.'}, 'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'no_filters', 'search_endpoint_disabled'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `no_filters`: No variantSetDbId was provided. `search_endpoint_disabled`: The active dialect declares POST /search/calls as known-dead on this server. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'format': {'enum': ['plink', 'vcf-lite', 'matrix-json'], 'type': 'string', 'description': 'The output format that was produced.'}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of call-set (germplasm) rows in the matrix.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (truncation, missing fields, etc.).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Canvas dataframe handle for the wide germplasm Ã\x97 variant matrix (registered for every format). Query with brapi_dataframe_query (SQL); export with brapi_dataframe_export. The vcf/ped/map text fields are the format-specific serialization of the same data.', 'additionalProperties': False}, 'truncated': {'type': 'boolean', 'description': 'True when the matrix is not the complete upstream result â\x80\x94 either the call pull hit the row ceiling (BRAPI_GENOTYPE_CALLS_MAX_PULL) or the distinct-variant count hit the column ceiling (BRAPI_GENOTYPE_MATRIX_MAX_COLUMNS). `warnings` names which ceiling fired.'}, 'columnCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of variant columns in the matrix (excluding the germplasm ID column).'}, 'callFormatting': {'type': 'object', 'properties': {'sepPhased': {'type': ['string', 'null'], 'description': 'Phased allele separator.'}, 'sepUnphased': {'type': ['string', 'null'], 'description': 'Unphased allele separator.'}, 'unknownString': {'type': ['string', 'null'], 'description': 'String used for unknown/missing calls.'}, 'expandHomozygotes': {'type': ['boolean', 'null'], 'description': 'Homozygous allele expansion flag.'}}, 'description': 'Genotype-encoding hints echoed by the server.', 'additionalProperties': False}, 'variantColumnLegend': {'type': 'object', 'description': 'Map of sanitized column name â\x86\x92 original variantDbId. Dataframe column names are SQL-safe identifiers; use this legend to correlate them back to the original variant IDs.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. When the collected set exceeds this, the full result lands in a dataframe and only the first `loadLimit` rows return inline â\x80\x94 query the dataframe with brapi_dataframe_query (SQL) for the rest. Upstream pageSize is fixed for genotype calls, so this knob only affects the inline preview here (no spillover capacity tradeoff).', 'exclusiveMinimum': 0}, 'callFormat': {'enum': ['VCF', 'FLAPJACK', 'DARTSEQ', 'JSON'], 'type': 'string', 'description': 'Requested call-encoding format, when the server honors it.'}, 'callSetDbIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Restrict to these call sets directly.'}, 'variantDbIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Restrict to specific variants.'}, 'germplasmDbIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Restrict to these germplasm (call sets).'}, 'variantSetDbId': {'type': 'string', 'minLength': 1, 'description': 'Scope calls to a single variant set. Strongly recommended.'}, 'variantSetDbIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Alternative: multiple variant sets at once.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'results', 'hasMore', 'callFormatting', 'distributions', 'truncated', 'totalCount', 'returnedCount', 'appliedFilters', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'no_filters', 'search_endpoint_disabled'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `no_filters`: No variant set, germplasm, call set, or variant filter was provided. `search_endpoint_disabled`: The active dialect declares POST /search/calls as known-dead on this server. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when no calls were returned â\x80\x94 how to broaden filters or verify IDs.'}, 'hasMore': {'type': 'boolean', 'description': 'True when the collection was truncated (equivalent to `truncated`).'}, 'results': {'type': 'array', 'items': {'type': 'object', 'properties': {'genotype': {'anyOf': [{'type': 'object', 'properties': {'values': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'description': 'Per-allele value string.'}}, {'type': 'null'}], 'description': 'Encoded allele values â\x80\x94 interpret using top-level `callFormatting`.'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'Structured genotype payload (array of allele values plus server-specific fields).'}, 'phaseSet': {'type': ['string', 'null'], 'description': 'Phase-set identifier linking calls that share a haplotype phase.'}, 'callSetDbId': {'type': ['string', 'null'], 'description': 'FK to the call set (one germplasm Ã\x97 one variant set = one call set).'}, 'callSetName': {'type': ['string', 'null'], 'description': 'Display name of the call set.'}, 'variantDbId': {'type': ['string', 'null'], 'description': 'FK to the variant being called.'}, 'variantName': {'type': ['string', 'null'], 'description': 'Display name / alias of the variant.'}, 'genotypeValue': {'type': ['string', 'null'], 'description': 'Legacy flat string form of the call (provided by some servers instead of `genotype`).'}, 'variantSetDbId': {'type': ['string', 'null'], 'description': 'FK to the variant set the call belongs to.'}}, 'description': 'One genotype call row.', 'additionalProperties': {}}, 'description': 'Call rows returned in-context (up to loadLimit).'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (truncation, capability gaps, partial pulls).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Dataframe handle when the full collected calls exceed loadLimit and were materialized as a dataframe. Query it with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'truncated': {'type': 'boolean', 'description': 'True when the deployment-wide pull limit was reached and more calls exist upstream. Narrow the filters and re-pull, or query the spilled dataframe.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total calls collected across all pages (may be capped by the deployment-wide pull limit; check `truncated`).'}, 'distributions': {'type': 'object', 'required': ['callSetName', 'variantName', 'variantSetDbId'], 'properties': {'callSetName': {'type': 'object', 'description': 'Call set name â\x86\x92 count of calls from that set.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'variantName': {'type': 'object', 'description': 'Variant name â\x86\x92 count of calls for that variant.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'variantSetDbId': {'type': 'object', 'description': 'Variant set ID â\x86\x92 count of calls from that set.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'description': 'Value frequency per field across the full collected call set.', 'additionalProperties': False}, 'returnedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Length of results[] â\x80\x94 rows returned in-context (up to loadLimit).'}, 'appliedFilters': {'type': 'object', 'description': 'The body sent to POST /search/calls (variant/germplasm/call-set scope plus pageSize).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'callFormatting': {'type': 'object', 'properties': {'sepPhased': {'type': ['string', 'null'], 'description': 'Separator between phased allele values (typically "|").'}, 'sepUnphased': {'type': ['string', 'null'], 'description': 'Separator between unphased allele values (typically "/").'}, 'unknownString': {'type': ['string', 'null'], 'description': 'String used for unknown / missing calls (often "." or "N").'}, 'expandHomozygotes': {'type': ['boolean', 'null'], 'description': 'When true, homozygous calls are expanded to both alleles.'}}, 'description': 'Genotype-encoding hints echoed by the server.', 'additionalProperties': False}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'text': {'type': 'string', 'description': 'Free-text query. Applied client-side as a substring match on returned rows (germplasmName, accessionNumber, defaultDisplayName, registered synonyms) â\x80\x94 no BrAPI server reliably supports a server-side free-text filter, so combine with `crops` / `genus` / etc. to narrow the upstream pull first.'}, 'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'crops': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by common crop names.'}, 'genus': {'type': 'string', 'description': 'Botanical genus.'}, 'names': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by germplasm display names.'}, 'species': {'type': 'string', 'description': 'Botanical species.'}, 'synonyms': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Match registered synonyms.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'collections': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by germplasm collection names.'}, 'extraFilters': {'type': 'object', 'description': 'Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'germplasmPUIs': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Persistent unique identifiers.'}, 'germplasmDbIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by DbIds.'}, 'accessionNumbers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by accession numbers (gene-bank catalog codes).'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'results', 'hasMore', 'distributions', 'totalCount', 'returnedCount', 'appliedFilters', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'all_filters_dropped'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `all_filters_dropped`: The active dialect dropped every filter the agent supplied â\x80\x94 the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when no rows were returned â\x80\x94 how to broaden filters or retry.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more rows exist beyond the returned set.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['germplasmDbId'], 'properties': {'genus': {'type': ['string', 'null'], 'description': 'Botanical genus.'}, 'species': {'type': ['string', 'null'], 'description': 'Botanical species.'}, 'subtaxa': {'type': ['string', 'null'], 'description': 'Botanical subtaxa (subspecies, variety, etc.).'}, 'pedigree': {'type': ['string', 'null'], 'description': 'Pedigree as a free-text string (e.g. "A/B//C").'}, 'synonyms': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'properties': {'type': {'type': ['string', 'null'], 'description': 'Synonym type (e.g. "COMMON", "SYNONYM").'}, 'synonym': {'type': ['string', 'null'], 'description': 'Synonym value.'}}, 'description': 'Registered synonym for this germplasm.', 'additionalProperties': {}}}, {'type': 'null'}], 'description': 'All registered synonyms (alternative names).'}, 'collection': {'type': ['string', 'null'], 'description': 'Collection name this accession belongs to.'}, 'germplasmPUI': {'type': ['string', 'null'], 'description': 'Persistent unique identifier (URI).'}, 'germplasmDbId': {'type': 'string', 'description': 'Server-side identifier for the germplasm.'}, 'germplasmName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'instituteCode': {'type': ['string', 'null'], 'description': 'FAO WIEWS institute code of the holding institute.'}, 'instituteName': {'type': ['string', 'null'], 'description': 'Display name of the holding institute.'}, 'commonCropName': {'type': ['string', 'null'], 'description': 'Common crop name (e.g. "Maize", "Wheat").'}, 'accessionNumber': {'type': ['string', 'null'], 'description': 'Gene-bank catalog number.'}, 'germplasmOrigin': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'properties': {}, 'description': 'One origin record (collection coordinates and uncertainty per BrAPI v2).', 'additionalProperties': {}}}, {'type': 'null'}], 'description': 'Origin records â\x80\x94 array of collection-site objects per BrAPI v2.'}, 'defaultDisplayName': {'type': ['string', 'null'], 'description': 'Preferred display label.'}, 'countryOfOriginCode': {'type': ['string', 'null'], 'description': 'ISO 3166-1 alpha-3 country code.'}, 'biologicalStatusOfAccessionDescription': {'type': ['string', 'null'], 'description': 'MCPD biological-status label (wild / landrace / breeding / cultivar, etc.).'}}, 'description': 'One BrAPI germplasm record.', 'additionalProperties': {}}, 'description': 'Germplasm rows returned in-context (up to loadLimit).'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (filter overrides, partial data, capability gaps).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the server.'}, 'distributions': {'type': 'object', 'required': ['commonCropName', 'genus', 'species', 'collection', 'countryOfOriginCode'], 'properties': {'genus': {'type': 'object', 'description': 'Genus â\x86\x92 count of rows with that genus.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'species': {'type': 'object', 'description': 'Species â\x86\x92 count of rows with that species.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'collection': {'type': 'object', 'description': 'Collection name â\x86\x92 count of rows in that collection.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'commonCropName': {'type': 'object', 'description': 'Common crop name â\x86\x92 count of rows for that crop.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'countryOfOriginCode': {'type': 'object', 'description': 'ISO country code â\x86\x92 count of rows from that country.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'description': 'Value frequency per field across the full result set.', 'additionalProperties': False}, 'returnedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Length of results[].'}, 'appliedFilters': {'type': 'object', 'description': 'The final filter map sent to the server (named + extraFilters).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'refinementHint': {'type': 'string', 'description': 'Suggested next-step query refinement when the result set is large.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'images': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by imageDbIds.'}, 'studies': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by studyDbIds.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'mimeTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by MIME type â\x80\x94 e.g. "image/jpeg", "image/png".'}, 'extraFilters': {'type': 'object', 'description': 'Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'observations': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by observationDbIds.'}, 'imageFileNames': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by uploaded file name.'}, 'observationUnits': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by observationUnitDbIds.'}, 'descriptiveOntologyTerms': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by ontology tags (e.g. "CO_334:plot").'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'results', 'hasMore', 'distributions', 'totalCount', 'returnedCount', 'appliedFilters', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'all_filters_dropped'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `all_filters_dropped`: The active dialect dropped every filter the agent supplied â\x80\x94 the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when no rows were returned â\x80\x94 how to broaden filters or retry.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more rows exist beyond the returned set.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['imageDbId'], 'properties': {'imageURL': {'type': ['string', 'null'], 'description': 'URL where the bytes live (may be relative to baseUrl or absolute).'}, 'mimeType': {'type': ['string', 'null'], 'description': 'MIME type (e.g. "image/jpeg").'}, 'copyright': {'type': ['string', 'null'], 'description': 'Copyright or rights notice.'}, 'imageDbId': {'type': 'string', 'description': 'Server-side identifier for the image.'}, 'imageName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'studyDbId': {'type': ['string', 'null'], 'description': 'FK to the study the image belongs to.'}, 'studyName': {'type': ['string', 'null'], 'description': 'Display name of the study.'}, 'imageWidth': {'type': ['number', 'null'], 'description': 'Pixel width. Coerced from string when the upstream emits a numeric string.'}, 'description': {'type': ['string', 'null'], 'description': 'Free-text description.'}, 'imageHeight': {'type': ['number', 'null'], 'description': 'Pixel height. Coerced from string when the upstream emits a numeric string.'}, 'imageFileName': {'type': ['string', 'null'], 'description': 'Original uploaded filename.'}, 'imageFileSize': {'type': ['number', 'null'], 'description': 'File size in bytes. Coerced from string when the upstream emits a numeric string.'}, 'imageTimeStamp': {'type': ['string', 'null'], 'description': 'ISO 8601 capture timestamp.'}, 'observationDbIds': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'description': 'Observation identifier.'}}, {'type': 'null'}], 'description': 'FKs to observations this image is evidence for.'}, 'observationUnitDbId': {'type': ['string', 'null'], 'description': 'FK to the observation unit this image depicts.'}, 'observationUnitName': {'type': ['string', 'null'], 'description': 'Display name of the observation unit.'}, 'descriptiveOntologyTerms': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'description': 'Ontology term ID or label.'}}, {'type': 'null'}], 'description': 'Descriptive ontology tags (e.g. "CO_334:plot").'}}, 'description': 'One BrAPI image metadata record.', 'additionalProperties': {}}, 'description': 'Image metadata rows returned in-context (up to loadLimit).'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (filter overrides, partial data, capability gaps).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the server.'}, 'distributions': {'type': 'object', 'required': ['mimeType', 'studyName', 'observationUnitName', 'descriptiveOntologyTerms'], 'properties': {'mimeType': {'type': 'object', 'description': 'MIME type â\x86\x92 count of images with that type.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'studyName': {'type': 'object', 'description': 'Study name â\x86\x92 count of images in that study.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'observationUnitName': {'type': 'object', 'description': 'Observation unit name â\x86\x92 count of images tied to that unit.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'descriptiveOntologyTerms': {'type': 'object', 'description': 'Ontology term â\x86\x92 count of images tagged with that term.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'description': 'Value frequency per field across the full result set.', 'additionalProperties': False}, 'returnedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Length of results[].'}, 'appliedFilters': {'type': 'object', 'description': 'The final filter map sent to the server (named + extraFilters).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'refinementHint': {'type': 'string', 'description': 'Suggested next-step query refinement when the result set is large.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'bbox': {'type': 'object', 'properties': {'maxLat': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Maximum latitude in WGS84 decimal degrees.'}, 'maxLon': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Maximum longitude in WGS84 decimal degrees.'}, 'minLat': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Minimum latitude in WGS84 decimal degrees.'}, 'minLon': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Minimum longitude in WGS84 decimal degrees.'}}, 'description': 'Optional post-fetch bounding box. All four corners must be set to activate the filter.'}, 'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'locations': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by locationDbIds.'}, 'countryCodes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'ISO 3166-1 alpha-3 country codes.'}, 'countryNames': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Free-form English country names or aliases (e.g. "Uganda", "United States", "USA") resolved client-side to ISO 3166-1 alpha-3 codes and merged into countryCodes. Names that do not resolve surface as a warning. Prefer countryCodes when you already have alpha-3 codes.'}, 'extraFilters': {'type': 'object', 'description': 'Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'abbreviations': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Short location abbreviations.'}, 'locationNames': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by display name.'}, 'locationTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Location type â\x80\x94 e.g. "Research Station", "Field".'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'results', 'hasMore', 'distributions', 'coordinateAxisOrder', 'totalCount', 'returnedCount', 'appliedFilters', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'all_filters_dropped'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `all_filters_dropped`: The active dialect dropped every filter the agent supplied â\x80\x94 the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when no rows were returned â\x80\x94 how to broaden filters or retry.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more rows exist beyond the returned set.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['locationDbId'], 'properties': {'altitude': {'type': ['number', 'null'], 'description': 'Altitude in meters above sea level.'}, 'latitude': {'type': ['number', 'null'], 'description': 'WGS84 latitude in decimal degrees (legacy field; modern servers use coordinates).'}, 'longitude': {'type': ['number', 'null'], 'description': 'WGS84 longitude in decimal degrees (legacy field; modern servers use coordinates).'}, 'coordinates': {'anyOf': [{'type': 'object', 'properties': {}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'BrAPI v2 GeoJSON Feature carrying [lon, lat, alt?] in geometry.coordinates.'}, 'countryCode': {'type': ['string', 'null'], 'description': 'ISO 3166-1 alpha-3 country code.'}, 'countryName': {'type': ['string', 'null'], 'description': 'Display name of the country.'}, 'abbreviation': {'type': ['string', 'null'], 'description': 'Short abbreviation.'}, 'locationDbId': {'type': 'string', 'description': 'Server-side identifier for the location.'}, 'locationName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'locationType': {'type': ['string', 'null'], 'description': 'Type of location (e.g. "Research Station", "Field", "Greenhouse").'}, 'instituteName': {'type': ['string', 'null'], 'description': 'Owning institute display name.'}, 'documentationURL': {'type': ['string', 'null'], 'description': 'URL pointing at extra documentation.'}, 'instituteAddress': {'type': ['string', 'null'], 'description': 'Postal address of the institute.'}}, 'description': 'One BrAPI location record.', 'additionalProperties': {}}, 'description': 'Location rows returned in-context (up to loadLimit). Bbox filter is applied after the upstream fetch.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (bbox malformed, filter overrides, capability gaps).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the server (or the post-bbox count when a bbox filter is active).'}, 'distributions': {'type': 'object', 'required': ['countryCode', 'locationType'], 'properties': {'countryCode': {'type': 'object', 'description': 'ISO country code â\x86\x92 count of locations in that country.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'locationType': {'type': 'object', 'description': 'Location type â\x86\x92 count of locations of that type.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'description': 'Value frequency per field across the full result set.', 'additionalProperties': False}, 'returnedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Length of results[] after any bbox filtering.'}, 'appliedFilters': {'type': 'object', 'description': 'The final filter map sent to the server (named + extraFilters).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'refinementHint': {'type': 'string', 'description': 'Suggested next-step query refinement when the result set is large.'}, 'coordinateAxisOrder': {'enum': ['spec', 'swapped'], 'type': 'string', 'description': 'Axis interpretation used when reading GeoJSON Point coordinates. "spec" follows the GeoJSON RFC 7946 [lon, lat, alt?] convention. "swapped" indicates the upstream server stores [lat, lon, alt?] (non-conformant) and bbox + rendered coordinates were interpreted accordingly.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'trials': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by trialDbIds.'}, 'seasons': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by seasonDbIds (e.g. "2022").'}, 'studies': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by studyDbIds.'}, 'programs': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by programDbIds.'}, 'germplasm': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by germplasmDbIds.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'variables': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by observationVariableDbIds.'}, 'timestampTo': {'type': 'string', 'description': 'ISO 8601 end of the observation-time window.'}, 'extraFilters': {'type': 'object', 'description': 'Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'observations': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by observationDbIds.'}, 'timestampFrom': {'type': 'string', 'description': 'ISO 8601 start of the observation-time window.'}, 'observationUnits': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by observationUnitDbIds.'}, 'observationLevels': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Observation unit level (plot, plant, field, etc.).'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'results', 'hasMore', 'distributions', 'totalCount', 'returnedCount', 'appliedFilters', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'all_filters_dropped'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `all_filters_dropped`: The active dialect dropped every filter the agent supplied â\x80\x94 the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when no rows were returned â\x80\x94 how to broaden filters or retry.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more rows exist beyond the returned set.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'properties': {'value': {'type': ['string', 'null'], 'description': 'Recorded measurement value (stringified per BrAPI spec).'}, 'season': {'anyOf': [{'type': 'string', 'description': 'Season identifier as a flat string (older BrAPI servers).'}, {'type': 'object', 'properties': {}, 'description': 'Structured season block per BrAPI v2.1 â\x80\x94 may carry seasonDbId, year, season, or seasonName. Fields vary by server; all pass through and are collapsed into a single label by format().', 'additionalProperties': {}}, {'type': 'null', 'description': 'Field present but null on the upstream.'}], 'description': 'Season â\x80\x94 either a flat string or a structured object depending on the server. format() normalizes both into a single label.'}, 'collector': {'type': ['string', 'null'], 'description': 'Name or ID of the person who collected the value.'}, 'studyDbId': {'type': ['string', 'null'], 'description': 'FK to the study the observation belongs to.'}, 'studyName': {'type': ['string', 'null'], 'description': 'Display name of the study.'}, 'uploadedBy': {'type': ['string', 'null'], 'description': 'Name or ID of the user who uploaded the record.'}, 'germplasmDbId': {'type': ['string', 'null'], 'description': 'FK to the germplasm the observation was taken on.'}, 'germplasmName': {'type': ['string', 'null'], 'description': 'Display name of the germplasm.'}, 'observationDbId': {'type': ['string', 'null'], 'description': 'Server-side identifier for the observation.'}, 'observationLevel': {'type': ['string', 'null'], 'description': 'Unit level â\x80\x94 e.g. "plot", "plant", "field".'}, 'observationUnitDbId': {'type': ['string', 'null'], 'description': 'FK to the observation unit (plot / plant / sample) that carries the measurement.'}, 'observationUnitName': {'type': ['string', 'null'], 'description': 'Display name of the observation unit.'}, 'observationTimeStamp': {'type': ['string', 'null'], 'description': 'ISO 8601 timestamp of the observation.'}, 'observationVariableDbId': {'type': ['string', 'null'], 'description': 'FK to the observation variable (trait) measured.'}, 'observationVariableName': {'type': ['string', 'null'], 'description': 'Display name of the observation variable.'}}, 'description': 'One BrAPI observation record.', 'additionalProperties': {}}, 'description': 'Observation rows returned in-context (up to loadLimit).'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (filter overrides, partial data, capability gaps).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the server.'}, 'distributions': {'type': 'object', 'required': ['observationVariableName', 'studyName', 'germplasmName', 'observationLevel', 'season'], 'properties': {'season': {'type': 'object', 'description': 'Season identifier â\x86\x92 count of observations in that season.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'studyName': {'type': 'object', 'description': 'Study name â\x86\x92 count of observations in that study.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'germplasmName': {'type': 'object', 'description': 'Germplasm name â\x86\x92 count of observations on that germplasm.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'observationLevel': {'type': 'object', 'description': 'Unit level (plot / plant / field) â\x86\x92 count of observations at that level.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'observationVariableName': {'type': 'object', 'description': 'Variable name â\x86\x92 count of observations for that trait.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'description': 'Value frequency per field across the full result set.', 'additionalProperties': False}, 'returnedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Length of results[].'}, 'appliedFilters': {'type': 'object', 'description': 'The final filter map sent to the server (named + extraFilters).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'refinementHint': {'type': 'string', 'description': 'Suggested next-step query refinement when the result set is large.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'crop': {'type': 'string', 'description': 'Filter by common crop name (single value).'}, 'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'active': {'type': 'boolean', 'description': 'Restrict to active / inactive studies.'}, 'trials': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by trialDbIds.'}, 'seasons': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by seasons (e.g. "2022").'}, 'programs': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by programDbIds.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'locations': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by locationDbIds (server-side identifiers, not display names).'}, 'studyNames': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by study display name.'}, 'trialTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by study types.'}, 'extraFilters': {'type': 'object', 'description': 'Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'results', 'hasMore', 'distributions', 'totalCount', 'returnedCount', 'appliedFilters', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'all_filters_dropped'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `all_filters_dropped`: The active dialect dropped every filter the agent supplied â\x80\x94 the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when no rows were returned â\x80\x94 how to broaden filters or retry.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more rows exist beyond the returned set.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['studyDbId'], 'properties': {'active': {'type': ['boolean', 'null'], 'description': 'True while the study is open for data capture.'}, 'endDate': {'type': ['string', 'null'], 'description': 'ISO 8601 end date.'}, 'seasons': {'anyOf': [{'type': 'array', 'items': {'type': ['string', 'null'], 'description': 'Season identifier â\x80\x94 typically a year like "2022". Nullable: some Breedbase deployments emit a null entry when the study is missing a season.'}}, {'type': 'null'}], 'description': 'Season identifiers this study spans.'}, 'studyPUI': {'type': ['string', 'null'], 'description': 'Persistent unique identifier (URI).'}, 'startDate': {'type': ['string', 'null'], 'description': 'ISO 8601 start date.'}, 'studyCode': {'type': ['string', 'null'], 'description': 'Short code or alias for the study.'}, 'studyDbId': {'type': 'string', 'description': 'Server-side identifier for the study.'}, 'studyName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'studyType': {'type': ['string', 'null'], 'description': 'E.g. "Yield Trial", "Phenotyping".'}, 'trialDbId': {'type': ['string', 'null'], 'description': 'FK to trial; resolve via `brapi_get_study`.'}, 'trialName': {'type': ['string', 'null'], 'description': 'Display name of the owning trial.'}, 'programDbId': {'type': ['string', 'null'], 'description': 'FK to program; resolve via `brapi_get_study`.'}, 'programName': {'type': ['string', 'null'], 'description': 'Display name of the owning program.'}, 'locationDbId': {'type': ['string', 'null'], 'description': 'FK to location; resolve via `brapi_get_study`.'}, 'locationName': {'type': ['string', 'null'], 'description': 'Display name of the study site.'}, 'commonCropName': {'type': ['string', 'null'], 'description': 'Common crop name (e.g. "Maize", "Wheat").'}, 'studyDescription': {'type': ['string', 'null'], 'description': 'Free-form description.'}}, 'description': 'One BrAPI study record.', 'additionalProperties': {}}, 'description': 'Rows returned in-context (up to loadLimit).'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (filter overrides, partial data).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the server.'}, 'distributions': {'type': 'object', 'required': ['programName', 'studyType', 'seasons', 'locationName', 'commonCropName'], 'properties': {'seasons': {'type': 'object', 'description': 'Season identifier â\x86\x92 count of rows in that season.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'studyType': {'type': 'object', 'description': 'Study type â\x86\x92 count of rows with that type.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'programName': {'type': 'object', 'description': 'Program name â\x86\x92 count of rows with that program.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'locationName': {'type': 'object', 'description': 'Location name â\x86\x92 count of rows at that site.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'commonCropName': {'type': 'object', 'description': 'Common crop name â\x86\x92 count of rows for that crop.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'description': 'Value frequency per field across the full result set.', 'additionalProperties': False}, 'returnedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Length of results[].'}, 'appliedFilters': {'type': 'object', 'description': 'The final filter map sent to the server (named + extraFilters).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'refinementHint': {'type': 'string', 'description': 'Suggested next-step query refinement when the result set is large.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'crop': {'type': 'string', 'description': 'Filter by common crop name (single value).'}, 'text': {'type': 'string', 'description': 'Free-text query. Ranks the **full upstream union** (the spilled dataframe when one is produced, otherwise the first page) via the ontology resolver, then fills the in-context window up to loadLimit with matches first and unmatched rows for context. Use exact filters (`variables`, `variableNames`, `variablePUIs`, `traitClasses`, `ontologies`) to actually narrow the upstream pull. Differs from `brapi_find_germplasm.text`, which drops unmatched rows.'}, 'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'scales': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by scaleDbIds.'}, 'methods': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by methodDbIds.'}, 'studies': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by studyDbIds.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'variables': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by observationVariableDbIds.'}, 'ontologies': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by ontologyDbIds.'}, 'extraFilters': {'type': 'object', 'description': 'Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'traitClasses': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by trait class.'}, 'variablePUIs': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by persistent ontology URIs.'}, 'variableNames': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by exact observationVariableNames.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'results', 'hasMore', 'distributions', 'ontologyCandidates', 'totalCount', 'returnedCount', 'appliedFilters', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'all_filters_dropped'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `all_filters_dropped`: The active dialect dropped every filter the agent supplied â\x80\x94 the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when no rows were returned â\x80\x94 how to broaden filters or retry.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more rows exist beyond the returned set.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['observationVariableDbId'], 'properties': {'scale': {'anyOf': [{'type': 'object', 'properties': {'dataType': {'type': ['string', 'null'], 'description': 'Scale data type (e.g. "Numerical", "Categorical", "Date", "Text").'}, 'scaleDbId': {'type': ['string', 'null'], 'description': 'FK to the scale.'}, 'scaleName': {'type': ['string', 'null'], 'description': 'Display name of the scale.'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'Scale used to record this variable (units / type / range).'}, 'trait': {'anyOf': [{'type': 'object', 'properties': {'synonyms': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'description': 'Trait synonym value.'}}, {'type': 'null'}], 'description': 'Registered trait synonyms.'}, 'traitDbId': {'type': ['string', 'null'], 'description': 'FK to the trait.'}, 'traitName': {'type': ['string', 'null'], 'description': 'Display name of the trait.'}, 'traitClass': {'type': ['string', 'null'], 'description': 'High-level trait grouping (e.g. "agronomic", "morphological").'}, 'description': {'type': ['string', 'null'], 'description': 'Free-text trait description.'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'The biological trait this variable measures.'}, 'method': {'anyOf': [{'type': 'object', 'properties': {'methodDbId': {'type': ['string', 'null'], 'description': 'FK to the method.'}, 'methodName': {'type': ['string', 'null'], 'description': 'Display name of the method.'}}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'Measurement method or protocol used to collect this variable.'}, 'ontologyDbId': {'type': ['string', 'null'], 'description': 'FK to the owning ontology.'}, 'ontologyName': {'type': ['string', 'null'], 'description': 'Display name of the owning ontology.'}, 'commonCropName': {'type': ['string', 'null'], 'description': 'Common crop name this variable is scoped to.'}, 'observationVariablePUI': {'type': ['string', 'null'], 'description': 'Persistent unique identifier â\x80\x94 typically an ontology term URI.'}, 'observationVariableDbId': {'type': 'string', 'description': 'Server-side identifier for the observation variable.'}, 'observationVariableName': {'type': ['string', 'null'], 'description': 'Display name.'}}, 'description': 'One BrAPI observation variable record.', 'additionalProperties': {}}, 'description': 'Observation variable rows returned in-context (up to loadLimit). Rows matching `text` are promoted to the top when the free-text query produces candidates.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (filter overrides, partial data, capability gaps).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the server.'}, 'distributions': {'type': 'object', 'required': ['ontologyDbId', 'traitClass', 'scaleName'], 'properties': {'scaleName': {'type': 'object', 'description': 'Scale name â\x86\x92 count of variables using that scale.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'traitClass': {'type': 'object', 'description': 'Trait class â\x86\x92 count of variables in that class.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'ontologyDbId': {'type': 'object', 'description': 'Ontology ID â\x86\x92 count of variables in that ontology.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'description': 'Value frequency per field across the full result set.', 'additionalProperties': False}, 'returnedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Length of results[].'}, 'appliedFilters': {'type': 'object', 'description': 'The final filter map sent to the server (named + extraFilters).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'refinementHint': {'type': 'string', 'description': 'Suggested next-step query refinement when the result set is large.'}, 'ontologyCandidates': {'type': 'array', 'items': {'type': 'object', 'required': ['source'], 'properties': {'name': {'type': 'string', 'description': 'Display name of the candidate.'}, 'source': {'enum': ['puiMatch', 'nameMatch', 'synonymMatch', 'traitClassMatch'], 'type': 'string', 'description': 'How the candidate was ranked â\x80\x94 PUI exact / name / synonym / trait-class.'}, 'termId': {'type': 'string', 'description': 'Ontology term ID / PUI when available (e.g. "CO_334:0000013").'}, 'synonyms': {'type': 'array', 'items': {'type': 'string', 'description': 'Registered synonym.'}, 'description': 'Combined variable + trait synonyms.'}, 'description': {'type': 'string', 'description': 'Trait description, when available.'}, 'ontologyDbId': {'type': 'string', 'description': 'Owning ontology ID.'}, 'observationVariableDbId': {'type': 'string', 'description': 'Server-side variable DbId of the source row, when present.'}}, 'description': 'One ranked ontology candidate from a free-text query.', 'additionalProperties': False}, 'description': 'Top ranked candidates from the free-text query (if any). Empty when `text` was not supplied.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'end': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Exclusive 1-based end.', 'exclusiveMinimum': 0}, 'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'start': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Inclusive 1-based start.'}, 'variants': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by variantDbIds.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'references': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by referenceDbIds.'}, 'variantSets': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Filter by variantSetDbIds.'}, 'extraFilters': {'type': 'object', 'description': 'Extra BrAPI filters forwarded verbatim. Valid keys vary by endpoint; brapi_describe_filters enumerates them. Named params on this tool take precedence on conflict.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'referenceName': {'type': 'string', 'description': 'Reference display name (e.g. "chr01", "chr1").'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'results', 'hasMore', 'distributions', 'totalCount', 'returnedCount', 'appliedFilters', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'all_filters_dropped'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `all_filters_dropped`: The active dialect dropped every filter the agent supplied â\x80\x94 the upstream server does not honor any of the requested scope filters on this endpoint, so the call would silently widen to the unfiltered baseline. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when no rows were returned â\x80\x94 how to broaden filters or retry.'}, 'hasMore': {'type': 'boolean', 'description': 'True when more rows exist beyond the returned set.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['variantDbId'], 'properties': {'end': {'type': ['number', 'null'], 'description': '1-based exclusive end position.'}, 'start': {'type': ['number', 'null'], 'description': '1-based inclusive start position.'}, 'variantDbId': {'type': 'string', 'description': 'Server-side identifier for the variant.'}, 'variantType': {'type': ['string', 'null'], 'description': 'Variant type (e.g. "SNP", "INDEL", "DUP").'}, 'variantNames': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'description': 'Variant name or alias.'}}, {'type': 'null'}], 'description': 'Known names / aliases for this variant.'}, 'filtersFailed': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'description': 'Filter ID that failed.'}}, {'type': 'null'}], 'description': 'IDs of QC filters this variant failed, when any.'}, 'filtersPassed': {'type': ['boolean', 'null'], 'description': 'True when the variant passed all QC filters.'}, 'referenceName': {'type': ['string', 'null'], 'description': 'Reference sequence name (e.g. "chr01").'}, 'alternateBases': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'description': 'Alternate allele sequence.'}}, {'type': 'null'}], 'description': 'Alternate alleles observed at this position.'}, 'filtersApplied': {'type': ['boolean', 'null'], 'description': 'True when QC filters were evaluated on this variant.'}, 'referenceBases': {'type': ['string', 'null'], 'description': 'Reference allele sequence at the variant position.'}, 'variantSetDbId': {'anyOf': [{'type': 'string', 'description': 'Single variant-set FK (older BrAPI servers).'}, {'type': 'array', 'items': {'type': 'string', 'description': 'One variant-set FK.'}, 'description': 'Variant-set FK array â\x80\x94 a variant may belong to multiple sets.'}, {'type': 'null', 'description': 'Field present but null on the upstream.'}], 'description': 'FK to the variant set(s) this variant belongs to. May be a string or string[] depending on server.'}, 'variantSetDbIds': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'description': 'Variant-set FK.'}}, {'type': 'null'}], 'description': 'Plural-form FK array per BrAPI v2.1 spec, when the server uses it.'}}, 'description': 'One BrAPI variant record.', 'additionalProperties': {}}, 'description': 'Variant rows returned in-context (up to loadLimit).'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (filter overrides, partial data, capability gaps).'}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Dataframe handle when the full result set was materialized as a dataframe. Query it with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the server.'}, 'distributions': {'type': 'object', 'required': ['variantType', 'referenceName', 'variantSetDbId'], 'properties': {'variantType': {'type': 'object', 'description': 'Variant type â\x86\x92 count of variants of that type.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'referenceName': {'type': 'object', 'description': 'Reference sequence name â\x86\x92 count of variants on that reference.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}, 'variantSetDbId': {'type': 'object', 'description': 'Variant set ID â\x86\x92 count of variants in that set.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'number'}}}, 'description': 'Value frequency per field across the full result set.', 'additionalProperties': False}, 'returnedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Length of results[].'}, 'appliedFilters': {'type': 'object', 'description': 'The final filter map sent to the server (named + extraFilters).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'refinementHint': {'type': 'string', 'description': 'Suggested next-step query refinement when the result set is large.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['germplasmDbId'], 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'variables': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional subset of observationVariableDbIds to aggregate. Omit to include every variable observed for the germplasm.'}, 'studyDbIds': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'description': 'Optional explicit set of studyDbIds to aggregate over. When supplied, skips automatic study discovery and its 200-study cap entirely â\x80\x94 use it to process a specific slice of studies, e.g. the full germplasm-scoped study set retrieved via brapi_find_studies with extraFilters.germplasmDbIds. Omit to let the tool discover the germplasmâ\x80\x99s studies automatically.'}, 'germplasmDbId': {'type': 'string', 'minLength': 1, 'description': 'The germplasmDbId to summarize performance for.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'germplasmDbId', 'studyCount', 'studyDbIds', 'perVariable', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'germplasm_not_found'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `germplasm_not_found`: Upstream returned no germplasm record for the requested germplasmDbId. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (study-discovery limits, dropped filters, fallback paths, per-study failures).'}, 'studyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of distinct studies that contributed any observation.'}, 'studyDbIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Distinct studyDbIds that contributed observations.'}, 'perVariable': {'type': 'array', 'items': {'type': 'object', 'required': ['observationVariableDbId', 'n', 'studyCount', 'studyDbIds', 'seasons'], 'properties': {'n': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of observations of this variable for the germplasm.'}, 'sd': {'type': 'number', 'description': 'Sample standard deviation (nâ\x88\x921) of numeric values; omitted when n < 2 or non-numeric.'}, 'max': {'type': 'string', 'description': 'Maximum value â\x80\x94 numeric max when numeric, else lexical max.'}, 'min': {'type': 'string', 'description': 'Minimum value â\x80\x94 numeric min when numeric, else lexical min.'}, 'mean': {'type': 'number', 'description': 'Arithmetic mean of numeric values (omitted for non-numeric traits).'}, 'median': {'type': 'number', 'description': 'Median of numeric values (omitted for non-numeric traits).'}, 'seasons': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Distinct season labels across the observations (empty when the server carries no season).'}, 'studyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of distinct studies contributing observations of this variable.'}, 'studyDbIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Distinct studyDbIds contributing observations of this variable.'}, 'observationVariableDbId': {'type': 'string', 'description': 'Observation variable identifier.'}, 'observationVariableName': {'type': 'string', 'description': 'Display name of the variable.'}}, 'description': 'Aggregated statistics for one observation variable across the studies the germplasm appears in.', 'additionalProperties': False}, 'description': 'Per-variable aggregates, sorted by observationVariableDbId.'}, 'germplasmDbId': {'type': 'string', 'description': 'The germplasm that was analyzed.'}, 'germplasmName': {'type': 'string', 'description': 'Display name of the germplasm, when the server provides one.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['germplasmDbId'], 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'germplasmDbId': {'type': 'string', 'minLength': 1, 'description': 'Germplasm identifier.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'germplasm', 'parents', 'attributes', 'directParentCount', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'germplasm_not_found'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `germplasm_not_found`: Upstream returned no germplasm record for the requested DbId. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'parents': {'type': 'array', 'items': {'type': 'object', 'properties': {'parentType': {'type': ['string', 'null'], 'description': 'E.g. "MALE", "FEMALE", "SELF".'}, 'germplasmDbId': {'type': ['string', 'null'], 'description': 'FK to the parent germplasm.'}, 'germplasmName': {'type': ['string', 'null'], 'description': 'Display name of the parent germplasm.'}}, 'description': 'One direct parent of the germplasm.', 'additionalProperties': {}}, 'description': 'Direct parents from /germplasm/{id}/pedigree.'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages â\x80\x94 failed sub-endpoint lookups, missing counts.'}, 'germplasm': {'type': 'object', 'required': ['germplasmDbId'], 'properties': {'genus': {'type': ['string', 'null'], 'description': 'Botanical genus.'}, 'species': {'type': ['string', 'null'], 'description': 'Botanical species.'}, 'subtaxa': {'type': ['string', 'null'], 'description': 'Botanical subtaxa.'}, 'pedigree': {'type': ['string', 'null'], 'description': 'Pedigree as a free-text string.'}, 'synonyms': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'properties': {'type': {'type': ['string', 'null'], 'description': 'Synonym type (e.g. "COMMON", "SYNONYM").'}, 'synonym': {'type': ['string', 'null'], 'description': 'Synonym value.'}}, 'description': 'Registered synonym for this germplasm.', 'additionalProperties': {}}}, {'type': 'null'}], 'description': 'All registered synonyms.'}, 'collection': {'type': ['string', 'null'], 'description': 'Collection name.'}, 'germplasmPUI': {'type': ['string', 'null'], 'description': 'Persistent unique identifier (URI).'}, 'germplasmDbId': {'type': 'string', 'description': 'Server-side identifier for the germplasm.'}, 'germplasmName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'instituteCode': {'type': ['string', 'null'], 'description': 'FAO WIEWS institute code.'}, 'instituteName': {'type': ['string', 'null'], 'description': 'Display name of the holding institute.'}, 'commonCropName': {'type': ['string', 'null'], 'description': 'Common crop name.'}, 'accessionNumber': {'type': ['string', 'null'], 'description': 'Gene-bank catalog number.'}, 'germplasmOrigin': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'properties': {}, 'description': 'One origin record (collection coordinates and uncertainty per BrAPI v2).', 'additionalProperties': {}}}, {'type': 'null'}], 'description': 'Origin records â\x80\x94 array of collection-site objects per BrAPI v2.'}, 'defaultDisplayName': {'type': ['string', 'null'], 'description': 'Preferred display label.'}, 'countryOfOriginCode': {'type': ['string', 'null'], 'description': 'ISO 3166-1 alpha-3 country code.'}, 'biologicalStatusOfAccessionDescription': {'type': ['string', 'null'], 'description': 'MCPD biological-status label.'}}, 'description': 'Canonical germplasm record as returned by `/germplasm/{id}`.', 'additionalProperties': {}}, 'attributes': {'type': 'array', 'items': {'type': 'object', 'properties': {'attributeDbId': {'type': ['string', 'null'], 'description': 'Attribute identifier.'}, 'attributeName': {'type': ['string', 'null'], 'description': 'Attribute display name.'}, 'attributeValue': {'type': ['string', 'null'], 'description': 'Recorded value (stringified).'}, 'determinedDate': {'type': ['string', 'null'], 'description': 'ISO 8601 date the attribute was determined.'}}, 'description': 'One germplasm attribute record.', 'additionalProperties': {}}, 'description': 'Germplasm attributes from /germplasm/{id}/attributes.'}, 'studyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'How many studies this germplasm has appeared in.'}, 'directParentCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Count of direct parents.'}, 'directDescendantCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Count of direct descendants from /germplasm/{id}/progeny.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['imageDbIds'], 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'imageDbIds': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'maxItems': 5, 'minItems': 1, 'description': '1â\x80\x935 image identifiers.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'images', 'errors', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'images_unsupported'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `images_unsupported`: BrAPI server does not advertise /images in /serverinfo. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['imageDbId', 'error'], 'properties': {'error': {'type': 'string', 'description': 'Reason the image could not be loaded.'}, 'imageDbId': {'type': 'string', 'description': 'Image identifier the error applies to.'}}, 'description': 'Per-image error entry returned when a fetch fails.', 'additionalProperties': False}, 'description': 'Images that could not be loaded, one entry per id.'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['imageDbId', 'mimeType', 'sizeBytes', 'source', 'data', 'metadata'], 'properties': {'data': {'type': 'string', 'description': 'Base64-encoded image bytes.'}, 'source': {'enum': ['imagecontent', 'imageURL'], 'type': 'string', 'description': 'How the bytes were fetched.'}, 'metadata': {'type': 'object', 'required': ['imageDbId'], 'properties': {'imageURL': {'type': 'string', 'description': 'URL where the bytes live.'}, 'mimeType': {'type': 'string', 'description': 'MIME type (e.g. "image/jpeg").'}, 'copyright': {'type': 'string', 'description': 'Copyright or rights notice.'}, 'imageDbId': {'type': 'string', 'description': 'Server-side identifier for the image.'}, 'imageName': {'type': 'string', 'description': 'Display name.'}, 'studyDbId': {'type': 'string', 'description': 'FK to the study the image belongs to.'}, 'studyName': {'type': 'string', 'description': 'Display name of the study.'}, 'imageWidth': {'type': 'number', 'description': 'Pixel width. Coerced from string when the upstream emits a numeric string.'}, 'description': {'type': 'string', 'description': 'Free-text description.'}, 'imageHeight': {'type': 'number', 'description': 'Pixel height. Coerced from string when the upstream emits a numeric string.'}, 'imageFileName': {'type': 'string', 'description': 'Original uploaded filename.'}, 'imageTimeStamp': {'type': 'string', 'description': 'ISO 8601 capture timestamp.'}, 'observationUnitDbId': {'type': 'string', 'description': 'FK to the observation unit this image depicts.'}, 'observationUnitName': {'type': 'string', 'description': 'Display name of the observation unit.'}}, 'description': 'Upstream metadata for this image.', 'additionalProperties': {}}, 'mimeType': {'type': 'string', 'description': 'Actual MIME type of the returned bytes.'}, 'imageDbId': {'type': 'string', 'description': 'Server-side identifier for the image.'}, 'sizeBytes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Size of the returned byte payload.'}}, 'description': 'Successfully loaded image payload.', 'additionalProperties': False}, 'description': 'Successfully loaded images.'}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['imageDbId', 'warning'], 'properties': {'warning': {'type': 'string', 'description': 'Advisory â\x80\x94 bytes loaded but something is suspect.'}, 'imageDbId': {'type': 'string', 'description': 'Image identifier the warning applies to.'}}, 'description': 'Per-image advisory for loaded-but-suspect content (e.g. non-image MIME).', 'additionalProperties': False}, 'description': 'Per-image advisories for loaded payloads that appear suspect â\x80\x94 e.g. the imageURL fallback returned a non-image MIME type, suggesting the upstream URL is broken.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['studyDbId'], 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'studyDbId': {'type': 'string', 'minLength': 1, 'description': 'Study identifier.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'study', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'study_not_found'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `study_not_found`: Upstream returned no study record for the requested DbId. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'study': {'type': 'object', 'required': ['studyDbId'], 'properties': {'active': {'type': ['boolean', 'null'], 'description': 'True while the study is open for data capture.'}, 'endDate': {'type': ['string', 'null'], 'description': 'ISO 8601 end date.'}, 'seasons': {'anyOf': [{'type': 'array', 'items': {'type': ['string', 'null'], 'description': 'Season identifier â\x80\x94 typically a year like "2022". Nullable: some Breedbase deployments emit a null entry when the study is missing a season.'}}, {'type': 'null'}], 'description': 'Season identifiers this study spans.'}, 'studyPUI': {'type': ['string', 'null'], 'description': 'Persistent unique identifier (URI).'}, 'startDate': {'type': ['string', 'null'], 'description': 'ISO 8601 start date.'}, 'studyCode': {'type': ['string', 'null'], 'description': 'Short code or alias for the study.'}, 'studyDbId': {'type': 'string', 'description': 'Server-side identifier for the study.'}, 'studyName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'studyType': {'type': ['string', 'null'], 'description': 'E.g. "Yield Trial", "Phenotyping".'}, 'trialDbId': {'type': ['string', 'null'], 'description': 'FK to the owning trial.'}, 'trialName': {'type': ['string', 'null'], 'description': 'Display name of the owning trial.'}, 'programDbId': {'type': ['string', 'null'], 'description': 'FK to the owning program.'}, 'programName': {'type': ['string', 'null'], 'description': 'Display name of the owning program.'}, 'locationDbId': {'type': ['string', 'null'], 'description': 'FK to the study site.'}, 'locationName': {'type': ['string', 'null'], 'description': 'Display name of the study site.'}, 'commonCropName': {'type': ['string', 'null'], 'description': 'Common crop name (e.g. "Maize", "Wheat").'}, 'studyDescription': {'type': ['string', 'null'], 'description': 'Free-form description.'}}, 'description': 'Canonical study record as returned by `/studies/{id}`.', 'additionalProperties': {}}, 'trial': {'type': 'object', 'required': ['trialDbId'], 'properties': {'active': {'type': ['boolean', 'null'], 'description': 'True while the trial is ongoing.'}, 'endDate': {'type': ['string', 'null'], 'description': 'ISO 8601 end date.'}, 'startDate': {'type': ['string', 'null'], 'description': 'ISO 8601 start date.'}, 'trialDbId': {'type': 'string', 'description': 'Server-side identifier for the trial.'}, 'trialName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'programDbId': {'type': ['string', 'null'], 'description': 'FK to the owning program.'}, 'programName': {'type': ['string', 'null'], 'description': 'Display name of the owning program.'}, 'commonCropName': {'type': ['string', 'null'], 'description': 'Common crop name.'}, 'trialDescription': {'type': ['string', 'null'], 'description': 'Free-form description.'}}, 'description': 'Resolved trial record (when the study has a trialDbId and the FK lookup succeeded).', 'additionalProperties': {}}, 'program': {'type': 'object', 'required': ['programDbId'], 'properties': {'programDbId': {'type': 'string', 'description': 'Server-side identifier for the program.'}, 'programName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'abbreviation': {'type': ['string', 'null'], 'description': 'Short abbreviation.'}, 'commonCropName': {'type': ['string', 'null'], 'description': 'Common crop name this program targets.'}, 'leadPersonName': {'type': ['string', 'null'], 'description': 'Name of the program lead.'}, 'documentationURL': {'type': ['string', 'null'], 'description': 'URL pointing at program documentation.'}}, 'description': 'Resolved program record (when the study has a programDbId and the FK lookup succeeded).', 'additionalProperties': {}}, 'location': {'type': 'object', 'required': ['locationDbId'], 'properties': {'altitude': {'type': ['number', 'null'], 'description': 'Altitude in meters above sea level.'}, 'latitude': {'type': ['number', 'null'], 'description': 'WGS84 latitude in decimal degrees (legacy field; modern servers use coordinates).'}, 'longitude': {'type': ['number', 'null'], 'description': 'WGS84 longitude in decimal degrees (legacy field; modern servers use coordinates).'}, 'coordinates': {'anyOf': [{'type': 'object', 'properties': {}, 'additionalProperties': {}}, {'type': 'null'}], 'description': 'BrAPI v2 GeoJSON Feature carrying [lon, lat, alt?] in geometry.coordinates.'}, 'countryCode': {'type': ['string', 'null'], 'description': 'ISO 3166-1 alpha-3 country code.'}, 'countryName': {'type': ['string', 'null'], 'description': 'Display name of the country.'}, 'abbreviation': {'type': ['string', 'null'], 'description': 'Short abbreviation.'}, 'locationDbId': {'type': 'string', 'description': 'Server-side identifier for the location.'}, 'locationName': {'type': ['string', 'null'], 'description': 'Display name.'}, 'locationType': {'type': ['string', 'null'], 'description': 'Type of location (e.g. "Research Station", "Field").'}}, 'description': 'Resolved location record (when the study has a locationDbId and the FK lookup succeeded).', 'additionalProperties': {}}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages â\x80\x94 failed FK lookups, missing counts.'}, 'variableCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total observation variables (traits) measured in this study. Omitted (with a warning) when the upstream server cannot scope the count to the study â\x80\x94 never reported as the server-wide total.'}, 'observationCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total observations recorded against this study. Omitted (with a warning) when the upstream server cannot scope the count to the study â\x80\x94 never reported as the server-wide total.'}, 'observationUnitCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total observation units (plots, plants, samples) in this study.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['path'], 'properties': {'path': {'type': 'string', 'minLength': 1, 'description': 'Endpoint path â\x80\x94 e.g. "/samples", "/methods". Leading "/" is optional.'}, 'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'params': {'type': 'object', 'description': 'Query parameters to append. Arrays are repeated per BrAPI convention.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'anyOf': [{'type': 'string'}, {'type': 'number'}, {'type': 'boolean'}, {'type': 'array', 'items': {'type': ['string', 'number']}}]}}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'url', 'path', 'metadata']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'url': {'type': 'string', 'description': 'Fully resolved URL that was fetched (baseUrl + path + query string).'}, 'path': {'type': 'string', 'description': 'Normalized path (leading `/` preserved) that was appended to the baseUrl.'}, 'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'cross_origin_path'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `cross_origin_path`: path argument was a full URL instead of a relative BrAPI route. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'result': {'description': 'Raw BrAPI `result` value â\x80\x94 whatever shape the endpoint returns.'}, 'metadata': {'type': 'object', 'properties': {'pagination': {'type': 'object', 'required': ['currentPage', 'pageSize', 'totalCount', 'totalPages'], 'properties': {'pageSize': {'type': 'number', 'description': 'Rows per page.'}, 'totalCount': {'type': 'number', 'description': 'Total rows matching the query across all pages.'}, 'totalPages': {'type': 'number', 'description': 'Total pages at the current pageSize.'}, 'currentPage': {'type': 'number', 'description': '0-indexed page number the server returned.'}}, 'description': 'BrAPI pagination block. Absent when the endpoint does not paginate.', 'additionalProperties': {}}}, 'description': 'BrAPI envelope metadata (pagination and any additional upstream fields).', 'additionalProperties': {}}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Present when the upstream advertised more rows than `loadLimit` AND the result is a list shape. The inline `result` is unchanged; the dataframe carries the full union of pages â\x80\x94 query with brapi_dataframe_query.', 'additionalProperties': False}, 'suggestion': {'type': 'string', 'description': 'Emitted when a curated goal-shaped tool covers this endpoint.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['noun', 'body'], 'properties': {'body': {'type': 'object', 'description': 'Filter body passed verbatim to POST /search/{noun}.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'noun': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'minLength': 1, 'description': 'Search noun â\x80\x94 e.g. "observations", "calls", "germplasm".'}, 'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'noun', 'kind', 'metadata']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'kind': {'enum': ['sync', 'async'], 'type': 'string', 'description': 'Whether the server returned inline results or we polled an async search.'}, 'noun': {'type': 'string', 'description': 'The `/search/{noun}` segment the body was posted to.'}, 'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias', 'search_endpoint_disabled'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. `search_endpoint_disabled`: The active dialect declares this POST /search/{noun} route as known-dead on this server. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'result': {'description': 'Raw BrAPI `result` value â\x80\x94 whatever shape the endpoint returns.'}, 'metadata': {'type': 'object', 'properties': {'pagination': {'type': 'object', 'required': ['currentPage', 'pageSize', 'totalCount', 'totalPages'], 'properties': {'pageSize': {'type': 'number', 'description': 'Rows per page.'}, 'totalCount': {'type': 'number', 'description': 'Total rows matching the query across all pages.'}, 'totalPages': {'type': 'number', 'description': 'Total pages at the current pageSize.'}, 'currentPage': {'type': 'number', 'description': '0-indexed page number the server returned.'}}, 'description': 'BrAPI pagination block. Absent when the endpoint does not paginate.', 'additionalProperties': {}}}, 'description': 'BrAPI envelope metadata (pagination and any additional upstream fields).', 'additionalProperties': {}}, 'dataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Present when the upstream advertised more rows than `loadLimit` AND the result is a list shape. The inline `result` is unchanged; the dataframe carries the full union of pages â\x80\x94 query with brapi_dataframe_query.', 'additionalProperties': False}, 'suggestion': {'type': 'string', 'description': 'Emitted when a curated goal-shaped tool covers this search.'}, 'searchResultsDbId': {'type': 'string', 'description': 'Populated when the server returned an async searchResultsDbId.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior `brapi_connect` call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'forceRefresh': {'type': 'boolean', 'default': False, 'description': 'Bypass the cached capability profile and refetch from the server.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'baseUrl', 'server', 'auth', 'capabilities', 'dialect', 'content', 'nextToolSuggestions', 'notes', 'fetchedAt']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'auth': {'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['none', 'sgn', 'oauth2', 'api_key', 'bearer'], 'type': 'string', 'description': 'Auth mode of the active connection.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 token-expiry timestamp, when known.'}, 'headerName': {'type': 'string', 'description': 'HTTP header carrying credentials.'}}, 'description': 'Auth summary for the active connection.', 'additionalProperties': False}, 'alias': {'type': 'string', 'description': 'Connection alias.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notes': {'type': 'array', 'items': {'type': 'string', 'description': 'Server-specific quirk or degradation note.'}, 'description': 'Server-specific quirks or degradation notes.'}, 'server': {'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Server display name from /serverinfo.'}, 'description': {'type': 'string', 'description': 'Free-form server description.'}, 'brapiVersion': {'type': 'string', 'description': 'Highest BrAPI version the server reports.'}, 'contactEmail': {'type': 'string', 'description': 'Contact email for the operator.'}, 'organizationURL': {'type': 'string', 'description': 'Organization website.'}, 'documentationURL': {'type': 'string', 'description': 'Documentation URL for this server.'}, 'organizationName': {'type': 'string', 'description': 'Hosting organization.'}}, 'description': 'Normalized server identity block.', 'additionalProperties': False}, 'baseUrl': {'type': 'string', 'description': 'BrAPI v2 base URL for this connection.'}, 'content': {'type': 'object', 'required': ['crops'], 'properties': {'crops': {'type': 'array', 'items': {'type': 'string', 'description': 'Common crop name as returned by /commoncropnames.'}, 'description': 'Crops the server declares via /commoncropnames.'}, 'studyCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total studies hosted, when the server exposes a cheap count.'}, 'programCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total programs hosted, when the server exposes a cheap count.'}, 'locationCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total locations hosted, when the server exposes a cheap count.'}, 'germplasmCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total germplasm hosted, when the server exposes a cheap count.'}}, 'description': 'Content summary (crops + optional totals).', 'additionalProperties': False}, 'dialect': {'type': 'object', 'required': ['id', 'source', 'envVar', 'disabledSearchEndpoints', 'notes'], 'properties': {'id': {'type': 'string', 'description': 'Active dialect id (e.g. "spec", "cassavabase"). Names a registered adapter that translates outbound filters and declares known-dead routes.'}, 'notes': {'type': 'array', 'items': {'type': 'string', 'description': 'Verified compatibility note exposed by the active dialect.'}, 'description': 'Dialect-level compatibility notes for this server family.'}, 'envVar': {'type': 'string', 'description': 'Env var that pins the dialect for this alias (e.g. BRAPI_DEFAULT_DIALECT) when detection misfires.'}, 'source': {'enum': ['env-override', 'url-pattern', 'server-name', 'organization-name', 'fallback'], 'type': 'string', 'description': 'Where the dialect id came from: env-var override, URL host match, /serverinfo serverName, organizationName, or the spec passthrough fallback.'}, 'inferredMappingCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of filter translations inferred from naming conventions but not independently verified. A non-zero count means some result narrowing on this server may not fire as expected.'}, 'verifiedMappingCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of filter translations the dialect has empirically verified against a live server. Higher means more confidence in the translation table.'}, 'disabledSearchEndpoints': {'type': 'array', 'items': {'type': 'string', 'description': 'A POST /search/{noun} route the dialect routes around.'}, 'description': 'POST /search nouns the active dialect treats as known-dead. Tools using these routes will refuse with a recovery hint.'}}, 'description': 'Active dialect adapter â\x80\x94 translates outbound filters and declares known-dead routes for this server.', 'additionalProperties': False}, 'fetchedAt': {'type': 'string', 'description': 'ISO 8601 timestamp of when this envelope was composed.'}, 'attribution': {'type': 'object', 'required': ['homepage', 'license', 'citation'], 'properties': {'isDemo': {'type': 'boolean', 'description': 'True when this server hosts demo / sample data, not production records.'}, 'license': {'type': 'string', 'description': 'License under which the upstream dataset is published (e.g. "CC-BY").'}, 'citation': {'type': 'string', 'description': 'Citation requested by the upstream when data is reused in publications.'}, 'homepage': {'type': 'string', 'description': 'Public homepage of the upstream dataset.'}}, 'description': 'Attribution metadata for built-in known-server connections. Absent for custom (env-only) connections.', 'additionalProperties': False}, 'capabilities': {'type': 'object', 'required': ['supportedCount', 'supported', 'notableGaps'], 'properties': {'supported': {'type': 'array', 'items': {'type': 'string', 'description': 'BrAPI service name (e.g. "studies", "search/germplasm").'}, 'description': 'Sorted list of supported service names.'}, 'notableGaps': {'type': 'array', 'items': {'type': 'string', 'description': 'Common-floor service the server does not expose.'}, 'description': 'Common-floor services this server does NOT expose.'}, 'supportedCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total distinct services the server advertises in /calls.'}}, 'description': 'Capability profile derived from /serverinfo.', 'additionalProperties': False}, 'nextToolSuggestions': {'type': 'array', 'items': {'type': 'object', 'required': ['toolName', 'reason', 'args'], 'properties': {'args': {'type': 'object', 'required': ['alias'], 'properties': {'alias': {'type': 'string', 'description': 'Connection alias to pass to the suggested tool.'}}, 'description': 'Arguments to call the tool with. Alias only â\x80\x94 narrow further with the tool filters.', 'additionalProperties': False}, 'reason': {'type': 'string', 'description': 'Why this tool applies to the connected server.'}, 'toolName': {'enum': ['brapi_find_studies', 'brapi_find_germplasm', 'brapi_find_variables', 'brapi_find_locations'], 'type': 'string', 'description': 'Entry-point finder tool this server can serve.'}}, 'description': 'A finder the connected server supports, with the arguments to start it.', 'additionalProperties': False}, 'description': 'Entry-point finders (studies, germplasm, variables, locations â\x80\x94 in that order) whose GET or POST /search route this server exposes under the active dialect. Empty when none apply.'}}, 'additionalProperties': False}
입력 스키마
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['germplasmDbIds'], 'properties': {'alias': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'description': 'Connection alias registered via brapi_connect. Omit to read the connection registered under alias `default` â\x80\x94 i.e. a prior brapi_connect call that did not specify an alias. Calls that used a non-default alias must pass that same alias here.'}, 'maxDepth': {'type': 'integer', 'default': 3, 'maximum': 10, 'description': 'Max generations to walk per direction (default 3, cap 10).', 'exclusiveMinimum': 0}, 'direction': {'enum': ['ancestors', 'descendants', 'both'], 'type': 'string', 'default': 'ancestors', 'description': 'Which direction to walk: ancestors (parents), descendants (progeny), or both.'}, 'loadLimit': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap on rows returned inline. Omit for the deployment default. Rows beyond the cap land in a dataframe; query with brapi_dataframe_query (SQL) instead of paging row-by-row.', 'exclusiveMinimum': 0}, 'germplasmDbIds': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'maxItems': 20, 'minItems': 1, 'description': 'Starting germplasm (1â\x80\x9320 roots). All roots are walked concurrently.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['alias', 'direction', 'maxDepth', 'nodes', 'edges', 'depthReached', 'rootCount', 'leafCount', 'cycleCount', 'deadEndCount', 'truncated', 'warnings']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'alias': {'type': 'string', 'description': 'Alias of the registered BrAPI connection the call used.'}, 'edges': {'type': 'array', 'items': {'type': 'object', 'required': ['from', 'to', 'relationship'], 'properties': {'to': {'type': 'string', 'description': 'germplasmDbId of the target.'}, 'from': {'type': 'string', 'description': 'germplasmDbId of the source of the relationship.'}, 'parentType': {'type': 'string', 'description': 'E.g. MALE, FEMALE, SELF, when the upstream response supplies it.'}, 'relationship': {'enum': ['parent', 'child'], 'type': 'string', 'description': 'Direction: parent = from is a parent of to; child = from is a descendant of to.'}}, 'description': 'One deduplicated pedigree edge between two nodes.', 'additionalProperties': False}, 'description': 'Deduplicated edge list. `relationship: "parent"` means `from` is a parent of `to`; `relationship: "child"` means `from` is a descendant of `to`.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['unknown_alias'], 'description': 'Machine-readable failure mode. Declared by this tool: `unknown_alias`: No connection has been registered under the requested alias. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['germplasmDbId', 'depth', 'isRoot', 'direction'], 'properties': {'depth': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Min distance from any root germplasm (0 for roots).'}, 'isRoot': {'type': 'boolean', 'description': 'True when this node is one of the starting germplasm.'}, 'direction': {'enum': ['root', 'ancestor', 'descendant', 'both'], 'type': 'string', 'description': 'Side of the root this node was reached from. `root` = the starting germplasm itself. `ancestor` = reached via /pedigree (a parent of the root or one of its parents). `descendant` = reached via /progeny. `both` = encountered as both an ancestor and a descendant in a bidirectional walk (rare â\x80\x94 backcross or selfing chain).'}, 'germplasmDbId': {'type': 'string', 'description': 'Server-side identifier for the germplasm.'}, 'germplasmName': {'type': 'string', 'description': 'Display name of the germplasm.'}}, 'description': 'One germplasm reached during the walk.', 'additionalProperties': False}, 'description': 'Deduplicated node list â\x80\x94 every germplasm reached by the walk, sorted by depth then DbId.'}, 'maxDepth': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The maximum depth the walk was allowed to reach (echoed from the input).', 'exclusiveMinimum': 0}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Advisory messages (capability gaps, per-node expansion failures).'}, 'direction': {'enum': ['ancestors', 'descendants', 'both'], 'type': 'string', 'description': 'The direction the walk expanded (echoed from the input).'}, 'leafCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Nodes that have no outgoing edges in the walked direction â\x80\x94 terminal in the DAG.'}, 'rootCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of starting germplasm roots.'}, 'truncated': {'type': 'boolean', 'description': 'True when the walk hit the 1000-node safety cap before exhausting depth.'}, 'cycleCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of times the walk revisited an already-registered node (cycles broken).'}, 'deadEndCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Nodes whose upstream pedigree/progeny lookup failed.'}, 'depthReached': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Deepest BFS level that produced at least one new edge (0 if only roots were walked).'}, 'edgesDataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Canvas dataframe holding the full edge set, present when the walk exceeds loadLimit â\x80\x94 edges[] is then a bounded preview. Any edge field that is a reserved SQL word (e.g. `from` â\x86\x92 `from_`) is renamed to a SQL-safe identifier; columnLegend maps it back. Query with brapi_dataframe_query (SQL).', 'additionalProperties': False}, 'nodesDataframe': {'type': 'object', 'required': ['tableName', 'rowCount', 'columns', 'createdAt', 'expiresAt'], 'properties': {'columns': {'type': 'array', 'items': {'type': 'string', 'description': 'Column name from the materialized rows.'}, 'description': 'Full column list of the dataframe.'}, 'maxRows': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Cap that was applied at create time, when truncation occurred.', 'exclusiveMinimum': 0}, 'rowCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of rows materialized in the dataframe.'}, 'createdAt': {'type': 'string', 'description': 'ISO 8601 timestamp the dataframe was created.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp after which the dataframe metadata will be purged. Re-run the find_* tool to refresh, or copy results out before expiry.'}, 'tableName': {'type': 'string', 'description': 'Dataframe name. Use with brapi_dataframe_describe (schema + provenance) and brapi_dataframe_query (SQL).'}, 'truncated': {'type': 'boolean', 'description': 'True when the dataframe hit a row cap before exhausting upstream.'}, 'totalCount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Total rows reported by the upstream server (may exceed rowCount when truncated).'}, 'columnLegend': {'type': 'object', 'description': 'Maps a sanitized column name back to its original upstream key, for columns renamed to clear the SQL-safe-identifier gate (e.g. `end` â\x86\x92 `end_`). Present only when a column was renamed â\x80\x94 write SQL against the sanitized (left-hand) names.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}, 'description': 'Canvas dataframe holding the full node set, present when the walk exceeds loadLimit â\x80\x94 nodes[] is then a bounded preview. Query with brapi_dataframe_query (SQL); JOIN to the edges dataframe on germplasmDbId.', 'additionalProperties': False}}, 'additionalProperties': False}
최근 도구 변경
유사한 MCP 서버
Clink Forge
Provides pay-per-call access to attested government datasets, primarily CDC and HHS health data plus EPA air-quality observations.
Thousand API
Provides deterministic data conversion, validation, JSON transformation, statistical calculations, date and schedule utilities, i…
HubVibe: Pay-per-Call Tools for AI Agents: Web Search, Email Verify, KYC, Stocks, Crypto, News, Data
Offers paid utilities for web audits, HTTP fetching and extraction, BigQuery analysis, LLM processing, code execution, blockchain…
Blixtworks
Offers pay-per-call utilities for text, image processing and analysis, data conversion, validation, web inspection, cryptography,…
osint
Provides source-cited US data and schemas for power systems, AI infrastructure, semiconductor production and trade, robotics, and…
Qiniso
Provides deterministic formatting, parsing, holiday and tax lookups, address handling, and checksum or structure validation for i…
kernelcad
Authors, evaluates, reviews, simulates, edits, and exports parametric CAD assemblies and geometry from editable TypeScript-based …
Scalix Cloud
Provides managed databases, SQL tools, container builds, persistent Linux machines, domains, scheduled functions, storage, and pr…