검색은 사용할 때만 로드됩니다. 아래에서 모든 분류를 살펴보세요.

MCP 도구

Threads 장소 검색

sosoapi_search_threads_locations

위치 권한으로 장소 이름을 검색하며 GPS는 사용하지 않습니다. 미승인 접근은 Menlo Park로 제한됩니다.

Markdown으로 읽기

프로필 및 전송 방식

프로필: full · 전송 방식: stdio, http

클라이언트에 표시할 도구는 core 또는 full로 선택하세요. 권한은 변경되지 않습니다. 로컬 파일 업로드에는 stdio가 필요하며 HTTP에서는 사용할 수 없습니다. 검색에 출력 스키마를 포함하려면 SOSOAPI_OUTPUT_SCHEMAS=1을 설정하세요. 이 설정과 관계없이 도구는 구조화된 결과를 반환합니다.

권한 및 부수 효과

주석은 클라이언트의 도구 설명을 돕습니다. 각 호출은 계속 사용자 인증, 역할, 리소스 접근, 기능 권한을 확인합니다.

{
  "readOnlyHint": true,
  "destructiveHint": false,
  "idempotentHint": true,
  "openWorldHint": true
}

입력 필드

필수는 상위 객체와 선택 분기 안에서 필수라는 뜻입니다. 필수 자식이 선택적 상위 객체를 필수로 만들지는 않습니다. 아래 규칙과 필드명은 계약에서 복사했습니다.

입력 필드
필드 / 분기유형 / 필수 여부제약 조건
$object상위 객체에서 필수
  • additionalProperties: false
workspace_idstring상위 객체에서 필수
  • format: "uuid"
social_account_idstring상위 객체에서 필수
  • format: "uuid"
querystring상위 객체에서 필수
  • minLength: 1
  • maxLength: 200
전체 JSON Schema
{
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "format": "uuid"
    },
    "social_account_id": {
      "type": "string",
      "format": "uuid"
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "workspace_id",
    "social_account_id",
    "query"
  ],
  "additionalProperties": false
}

구조화된 출력

이 스키마는 성공한 도구 결과의 structuredContent를 설명합니다. MCP 응답에는 content도 포함되며 호출 실패 시 isError가 설정될 수 있습니다. 게시 시 접수된 요청이나 텍스트 응답을 확인으로 간주하지 말고 게시물의 최종 결과를 읽으세요. 연결된 API 작업에 권한과 재시도 규칙이 설명되어 있습니다.

필수는 상위 객체와 선택 분기 안에서 필수라는 뜻입니다. 필수 자식이 선택적 상위 객체를 필수로 만들지는 않습니다. 아래 규칙과 필드명은 계약에서 복사했습니다.

구조화된 출력
필드 / 분기유형 / 필수 여부제약 조건
$object상위 객체에서 필수
  • additionalProperties: false
contract_versionstring상위 객체에서 필수
  • const: "threads-reads/v1"
operationstring상위 객체에서 필수
  • const: "location_search"
sourcestring상위 객체에서 필수
  • const: "official_threads_api"
workspace_idstring상위 객체에서 필수
  • format: "uuid"
social_account_idstring상위 객체에서 필수
  • format: "uuid"
provider_account_idstring상위 객체에서 필수
  • pattern: "^\\d{2,20}$"
provider_app_identitystring | null상위 객체에서 필수—
provider_app_identityanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
provider_app_identityanyOf 2null상위 객체에서 필수—
oauth_snapshot_idstring | null상위 객체에서 필수—
oauth_snapshot_idanyOf 1string상위 객체에서 필수
  • format: "uuid"
oauth_snapshot_idanyOf 2null상위 객체에서 필수—
fetched_atstring상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
statusstring상위 객체에서 필수
  • enum: ["available","partial","unavailable"]
unavailable_reasonstring | null상위 객체에서 필수—
unavailable_reasonanyOf 1string상위 객체에서 필수
  • enum: ["grant_inventory_unknown","missing_permissions","issuing_app_unknown","credential_unavailable","credential_expired","account_unhealthy","provider_denied","provider_rate_limited","provider_unavailable","provider_response_invalid"]
unavailable_reasonanyOf 2null상위 객체에서 필수—
accessobject상위 객체에서 필수
  • additionalProperties: false
access.required_permissionsarray상위 객체에서 필수
  • maxItems: 4
access.required_permissions[]string선택 / 항목
  • pattern: "^[a-z][a-z0-9_]{0,99}$"
access.missing_permissionsarray상위 객체에서 필수
  • maxItems: 4
access.missing_permissions[]string선택 / 항목
  • pattern: "^[a-z][a-z0-9_]{0,99}$"
access.permission_statestring상위 객체에서 필수
  • enum: ["granted","missing","unknown"]
access.grant_evidencestring상위 객체에서 필수
  • enum: ["exact","unknown"]
access.app_accessstring상위 객체에서 필수
  • const: "unverified"
dataarray상위 객체에서 필수
  • maxItems: 100
data[]object선택 / 항목
  • additionalProperties: false
data[].idstring상위 객체에서 필수
  • pattern: "^\\d{2,20}$"
data[].textstring | null상위 객체에서 필수—
data[].textanyOf 1string상위 객체에서 필수
  • maxLength: 30000
data[].textanyOf 2null상위 객체에서 필수—
data[].usernamestring | null상위 객체에서 필수—
data[].usernameanyOf 1string상위 객체에서 필수
  • pattern: "^[A-Za-z0-9._]{1,30}$"
data[].usernameanyOf 2null상위 객체에서 필수—
data[].permalinkstring | null상위 객체에서 필수—
data[].permalinkanyOf 1string상위 객체에서 필수
  • format: "uri"
data[].permalinkanyOf 2null상위 객체에서 필수—
data[].timestampstring | null상위 객체에서 필수—
data[].timestampanyOf 1string상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
data[].timestampanyOf 2null상위 객체에서 필수—
data[].media_typestring | null상위 객체에서 필수—
data[].media_typeanyOf 1string상위 객체에서 필수
  • enum: ["TEXT","TEXT_POST","IMAGE","VIDEO","CAROUSEL_ALBUM","AUDIO","REPOST_FACADE"]
data[].media_typeanyOf 2null상위 객체에서 필수—
data[].is_replyboolean | null상위 객체에서 필수—
data[].is_quote_postboolean | null상위 객체에서 필수—
data[].has_repliesboolean | null상위 객체에서 필수—
data[].root_post_idstring | null선택 / 항목—
data[].root_post_idanyOf 1string선택 / 항목
  • pattern: "^\\d{2,20}$"
data[].root_post_idanyOf 2null선택 / 항목—
data[].replied_to_idstring | null선택 / 항목—
data[].replied_to_idanyOf 1string선택 / 항목
  • pattern: "^\\d{2,20}$"
data[].replied_to_idanyOf 2null선택 / 항목—
profileobject | null상위 객체에서 필수—
profileanyOf 1object상위 객체에서 필수
  • additionalProperties: false
profile.usernameanyOf 1string상위 객체에서 필수
  • pattern: "^[A-Za-z0-9._]{1,30}$"
profile.nameanyOf 1string | null상위 객체에서 필수—
profile.nameanyOf 1 / anyOf 1string상위 객체에서 필수
  • maxLength: 200
profile.nameanyOf 1 / anyOf 2null상위 객체에서 필수—
profile.biographyanyOf 1string | null상위 객체에서 필수—
profile.biographyanyOf 1 / anyOf 1string상위 객체에서 필수
  • maxLength: 2000
profile.biographyanyOf 1 / anyOf 2null상위 객체에서 필수—
profile.is_verifiedanyOf 1boolean | null상위 객체에서 필수—
profile.follower_countanyOf 1integer | null상위 객체에서 필수—
profile.follower_countanyOf 1 / anyOf 1integer상위 객체에서 필수
  • minimum: 0
  • maximum: 9007199254740991
profile.follower_countanyOf 1 / anyOf 2null상위 객체에서 필수—
profileanyOf 2null상위 객체에서 필수—
locationsarray상위 객체에서 필수
  • maxItems: 100
locations[]object선택 / 항목
  • additionalProperties: false
locations[].idstring상위 객체에서 필수
  • pattern: "^\\d{2,20}$"
locations[].namestring | null상위 객체에서 필수—
locations[].nameanyOf 1string상위 객체에서 필수
  • maxLength: 200
locations[].nameanyOf 2null상위 객체에서 필수—
locations[].addressstring | null상위 객체에서 필수—
locations[].addressanyOf 1string상위 객체에서 필수
  • maxLength: 500
locations[].addressanyOf 2null상위 객체에서 필수—
locations[].citystring | null상위 객체에서 필수—
locations[].cityanyOf 1string상위 객체에서 필수
  • maxLength: 200
locations[].cityanyOf 2null상위 객체에서 필수—
locations[].countrystring | null상위 객체에서 필수—
locations[].countryanyOf 1string상위 객체에서 필수
  • maxLength: 200
locations[].countryanyOf 2null상위 객체에서 필수—
locations[].postal_codestring | null상위 객체에서 필수—
locations[].postal_codeanyOf 1string상위 객체에서 필수
  • maxLength: 100
locations[].postal_codeanyOf 2null상위 객체에서 필수—
root_post_idstring선택 / 항목
  • pattern: "^\\d{2,20}$"
target_usernamestring선택 / 항목
  • pattern: "^[A-Za-z0-9._]{1,30}$"
coverageobject상위 객체에서 필수
  • additionalProperties: false
coverage.completeboolean상위 객체에서 필수
  • const: false
coverage.next_cursorstring | null상위 객체에서 필수—
coverage.next_cursoranyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 4096
coverage.next_cursoranyOf 2null상위 객체에서 필수—
coverage.omitted_rowsinteger상위 객체에서 필수
  • minimum: 0
  • maximum: 9007199254740991
coverage.reasonsarray상위 객체에서 필수
  • maxItems: 8
coverage.reasons[]string선택 / 항목
  • maxLength: 400
quotaarray상위 객체에서 필수
  • maxItems: 1
quota[]object선택 / 항목
  • additionalProperties: false
quota[].providerstring상위 객체에서 필수
  • const: "meta"
quota[].usageobject상위 객체에서 필수
  • additionalProperties: false
quota[].usage.call_countnumber선택 / 항목—
quota[].usage.total_cputimenumber선택 / 항목—
quota[].usage.total_timenumber선택 / 항목—
quota[].usage.estimated_time_to_regain_accessnumber선택 / 항목—
quota[].sourcesarray상위 객체에서 필수
  • maxItems: 2
quota[].sources[]string선택 / 항목
  • enum: ["x-app-usage","x-business-use-case-usage"]
전체 JSON Schema
{
  "type": "object",
  "properties": {
    "contract_version": {
      "type": "string",
      "const": "threads-reads/v1"
    },
    "operation": {
      "type": "string",
      "const": "location_search"
    },
    "source": {
      "type": "string",
      "const": "official_threads_api"
    },
    "workspace_id": {
      "type": "string",
      "format": "uuid"
    },
    "social_account_id": {
      "type": "string",
      "format": "uuid"
    },
    "provider_account_id": {
      "type": "string",
      "pattern": "^\\d{2,20}$"
    },
    "provider_app_identity": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ]
    },
    "oauth_snapshot_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid"
        },
        {
          "type": "null"
        }
      ]
    },
    "fetched_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "status": {
      "type": "string",
      "enum": [
        "available",
        "partial",
        "unavailable"
      ]
    },
    "unavailable_reason": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "grant_inventory_unknown",
            "missing_permissions",
            "issuing_app_unknown",
            "credential_unavailable",
            "credential_expired",
            "account_unhealthy",
            "provider_denied",
            "provider_rate_limited",
            "provider_unavailable",
            "provider_response_invalid"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "access": {
      "type": "object",
      "properties": {
        "required_permissions": {
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,99}$"
          }
        },
        "missing_permissions": {
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,99}$"
          }
        },
        "permission_state": {
          "type": "string",
          "enum": [
            "granted",
            "missing",
            "unknown"
          ]
        },
        "grant_evidence": {
          "type": "string",
          "enum": [
            "exact",
            "unknown"
          ]
        },
        "app_access": {
          "type": "string",
          "const": "unverified"
        }
      },
      "required": [
        "required_permissions",
        "missing_permissions",
        "permission_state",
        "grant_evidence",
        "app_access"
      ],
      "additionalProperties": false
    },
    "data": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d{2,20}$"
          },
          "text": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30000
              },
              {
                "type": "null"
              }
            ]
          },
          "username": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[A-Za-z0-9._]{1,30}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "permalink": {
            "anyOf": [
              {
                "type": "string",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "media_type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "TEXT",
                  "TEXT_POST",
                  "IMAGE",
                  "VIDEO",
                  "CAROUSEL_ALBUM",
                  "AUDIO",
                  "REPOST_FACADE"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "is_reply": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "is_quote_post": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "has_replies": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "root_post_id": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{2,20}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "replied_to_id": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{2,20}$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "text",
          "username",
          "permalink",
          "timestamp",
          "media_type",
          "is_reply",
          "is_quote_post",
          "has_replies"
        ],
        "additionalProperties": false
      }
    },
    "profile": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "username": {
              "type": "string",
              "pattern": "^[A-Za-z0-9._]{1,30}$"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "biography": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2000
                },
                {
                  "type": "null"
                }
              ]
            },
            "is_verified": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "follower_count": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "username",
            "name",
            "biography",
            "is_verified",
            "follower_count"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "locations": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d{2,20}$"
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "address": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "city": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "postal_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "address",
          "city",
          "country",
          "postal_code"
        ],
        "additionalProperties": false
      }
    },
    "root_post_id": {
      "type": "string",
      "pattern": "^\\d{2,20}$"
    },
    "target_username": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._]{1,30}$"
    },
    "coverage": {
      "type": "object",
      "properties": {
        "complete": {
          "type": "boolean",
          "const": false
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            {
              "type": "null"
            }
          ]
        },
        "omitted_rows": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "reasons": {
          "maxItems": 8,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 400
          }
        }
      },
      "required": [
        "complete",
        "next_cursor",
        "omitted_rows",
        "reasons"
      ],
      "additionalProperties": false
    },
    "quota": {
      "maxItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "const": "meta"
          },
          "usage": {
            "type": "object",
            "properties": {
              "call_count": {
                "type": "number"
              },
              "total_cputime": {
                "type": "number"
              },
              "total_time": {
                "type": "number"
              },
              "estimated_time_to_regain_access": {
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "sources": {
            "maxItems": 2,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "x-app-usage",
                "x-business-use-case-usage"
              ]
            }
          }
        },
        "required": [
          "provider",
          "usage",
          "sources"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "contract_version",
    "operation",
    "source",
    "workspace_id",
    "social_account_id",
    "provider_account_id",
    "provider_app_identity",
    "oauth_snapshot_id",
    "fetched_at",
    "status",
    "unavailable_reason",
    "access",
    "data",
    "profile",
    "locations",
    "coverage",
    "quota"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

도구 호출 예제

예제는 스키마로 확인한 가상 값을 사용합니다. ID를 사용 권한이 있는 값으로, 미디어를 준비된 에셋으로, 날짜를 확인된 게시 시각으로 바꾸세요. 쓰기 제출 전에 계정 적격성을 확인하세요. 이 페이지는 API 요청을 보내지 않습니다.

{
  "name": "sosoapi_search_threads_locations",
  "arguments": {
    "workspace_id": "11111111-1111-4111-8111-111111111111",
    "social_account_id": "22222222-2222-4222-8222-222222222222",
    "query": "fictional market"
  }
}

structuredContent

{
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "social_account_id": "22222222-2222-4222-8222-222222222222",
  "contract_version": "threads-reads/v1",
  "operation": "location_search",
  "source": "official_threads_api",
  "provider_account_id": "12345",
  "provider_app_identity": null,
  "oauth_snapshot_id": null,
  "fetched_at": "2099-01-15T09:00:00Z",
  "status": "unavailable",
  "unavailable_reason": "issuing_app_unknown",
  "access": {
    "required_permissions": [
      "threads_basic",
      "threads_location_tagging"
    ],
    "missing_permissions": [],
    "permission_state": "unknown",
    "grant_evidence": "unknown",
    "app_access": "unverified"
  },
  "data": [],
  "profile": null,
  "locations": [],
  "quota": [],
  "coverage": {
    "complete": false,
    "next_cursor": null,
    "omitted_rows": 0,
    "reasons": [
      "Fictional documentation example: no provider request was made and no account data was read.",
      "App access and any pending permission review remain unverified; this is not successful provider or public-access evidence."
    ]
  }
}
MCP 설치 또는 연결