{
  "service": "perigon",
  "displayName": "Perigon",
  "categories": [
    "AI",
    "Data"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "PERIGON_API_KEY",
      "description": "Perigon API key sent with the x-api-key request header. Create an account and manage API keys from the developer section at https://www.perigon.io/dev."
    }
  ],
  "homepageUrl": "https://perigon.io",
  "actions": [
    {
      "id": "perigon.get_journalist",
      "service": "perigon",
      "name": "get_journalist",
      "description": "Get one Perigon journalist profile by journalist ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "description": "The Perigon journalist ID.",
            "pattern": "\\S"
          }
        },
        "additionalProperties": false,
        "required": [
          "id"
        ],
        "description": "Input parameters for retrieving a journalist by ID."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "journalist": {
            "type": "object",
            "additionalProperties": true,
            "description": "One Perigon result object."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "journalist",
          "raw"
        ],
        "description": "The normalized Perigon journalist profile response."
      }
    },
    {
      "id": "perigon.search_articles",
      "service": "perigon",
      "name": "search_articles",
      "description": "Search Perigon news articles with keyword, date, entity, source, and category filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The primary search query using Perigon Boolean search syntax.",
            "pattern": "\\S"
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article titles.",
            "pattern": "\\S"
          },
          "desc": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article descriptions.",
            "pattern": "\\S"
          },
          "content": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article content.",
            "pattern": "\\S"
          },
          "summary": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article summaries.",
            "pattern": "\\S"
          },
          "from": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest publication date or date-time to include.",
            "pattern": "\\S"
          },
          "to": {
            "type": "string",
            "minLength": 1,
            "description": "The latest publication date or date-time to include.",
            "pattern": "\\S"
          },
          "addDateFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest Perigon ingestion date or date-time to include.",
            "pattern": "\\S"
          },
          "addDateTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest Perigon ingestion date or date-time to include.",
            "pattern": "\\S"
          },
          "category": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Perigon category.",
              "pattern": "\\S"
            },
            "description": "The broad news categories to include.",
            "minItems": 1
          },
          "topic": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Perigon topic.",
              "pattern": "\\S"
            },
            "description": "The Perigon topics to include.",
            "minItems": 1
          },
          "source": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One source domain.",
              "pattern": "\\S"
            },
            "description": "The publisher domains or wildcard source patterns to include.",
            "minItems": 1
          },
          "sourceGroup": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One source group.",
              "pattern": "\\S"
            },
            "description": "The curated Perigon source groups to include.",
            "minItems": 1
          },
          "language": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One language code.",
              "pattern": "\\S"
            },
            "description": "The ISO 639 language codes to include.",
            "minItems": 1
          },
          "country": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One country code.",
              "pattern": "\\S"
            },
            "description": "The source country codes to include.",
            "minItems": 1
          },
          "label": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One editorial label.",
              "pattern": "\\S"
            },
            "description": "The editorial labels to include.",
            "minItems": 1
          },
          "medium": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One media type.",
              "pattern": "\\S"
            },
            "description": "The article media types to include.",
            "minItems": 1
          },
          "personName": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One person name.",
              "pattern": "\\S"
            },
            "description": "The exact person names to include.",
            "minItems": 1
          },
          "personWikidataId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Wikidata person ID.",
              "pattern": "\\S"
            },
            "description": "The Wikidata person IDs to include.",
            "minItems": 1
          },
          "companyName": {
            "type": "string",
            "minLength": 1,
            "description": "The exact company name to include.",
            "pattern": "\\S"
          },
          "companyDomain": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One company domain.",
              "pattern": "\\S"
            },
            "description": "The company domains to include.",
            "minItems": 1
          },
          "companyId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One company ID.",
              "pattern": "\\S"
            },
            "description": "The Perigon company IDs to include.",
            "minItems": 1
          },
          "companySymbol": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One stock symbol.",
              "pattern": "\\S"
            },
            "description": "The company stock symbols to include.",
            "minItems": 1
          },
          "journalistId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One journalist ID.",
              "pattern": "\\S"
            },
            "description": "The journalist IDs to include.",
            "minItems": 1
          },
          "author": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One author name.",
              "pattern": "\\S"
            },
            "description": "The author names to include.",
            "minItems": 1
          },
          "clusterId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One story cluster ID.",
              "pattern": "\\S"
            },
            "description": "The story cluster IDs to include.",
            "minItems": 1
          },
          "showReprints": {
            "type": "boolean",
            "description": "Whether wire-service reprints should be included."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "relevance",
              "date",
              "reverseDate",
              "addDate",
              "reverseAddDate",
              "pubDate",
              "refreshDate"
            ],
            "description": "The article sort order."
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "showNumResults": {
            "type": "boolean",
            "description": "Whether Perigon should return an exact result count."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for searching Perigon news articles.",
        "anyOf": [
          {
            "required": [
              "q"
            ]
          },
          {
            "required": [
              "title"
            ]
          },
          {
            "required": [
              "desc"
            ]
          },
          {
            "required": [
              "content"
            ]
          },
          {
            "required": [
              "summary"
            ]
          },
          {
            "required": [
              "from"
            ]
          },
          {
            "required": [
              "to"
            ]
          },
          {
            "required": [
              "addDateFrom"
            ]
          },
          {
            "required": [
              "addDateTo"
            ]
          },
          {
            "required": [
              "category"
            ]
          },
          {
            "required": [
              "topic"
            ]
          },
          {
            "required": [
              "source"
            ]
          },
          {
            "required": [
              "sourceGroup"
            ]
          },
          {
            "required": [
              "language"
            ]
          },
          {
            "required": [
              "country"
            ]
          },
          {
            "required": [
              "label"
            ]
          },
          {
            "required": [
              "medium"
            ]
          },
          {
            "required": [
              "personName"
            ]
          },
          {
            "required": [
              "personWikidataId"
            ]
          },
          {
            "required": [
              "companyName"
            ]
          },
          {
            "required": [
              "companyDomain"
            ]
          },
          {
            "required": [
              "companyId"
            ]
          },
          {
            "required": [
              "companySymbol"
            ]
          },
          {
            "required": [
              "journalistId"
            ]
          },
          {
            "required": [
              "author"
            ]
          },
          {
            "required": [
              "clusterId"
            ]
          }
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "numResults": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The result count returned by Perigon when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "articles": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The article objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "numResults",
          "articles",
          "raw"
        ],
        "description": "The normalized Perigon article search response."
      }
    },
    {
      "id": "perigon.search_companies",
      "service": "perigon",
      "name": "search_companies",
      "description": "Search Perigon company entities by name, domain, symbol, industry, country, and exchange.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The company search query.",
            "pattern": "\\S"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to company names.",
            "pattern": "\\S"
          },
          "domain": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One company domain.",
              "pattern": "\\S"
            },
            "description": "The company domains to include.",
            "minItems": 1
          },
          "symbol": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One stock symbol.",
              "pattern": "\\S"
            },
            "description": "The stock symbols to include.",
            "minItems": 1
          },
          "id": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One company ID.",
              "pattern": "\\S"
            },
            "description": "The Perigon company IDs to include.",
            "minItems": 1
          },
          "industry": {
            "type": "string",
            "minLength": 1,
            "description": "The company industry filter.",
            "pattern": "\\S"
          },
          "sector": {
            "type": "string",
            "minLength": 1,
            "description": "The company sector filter.",
            "pattern": "\\S"
          },
          "country": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One country code.",
              "pattern": "\\S"
            },
            "description": "The company country codes to include.",
            "minItems": 1
          },
          "exchange": {
            "type": "string",
            "minLength": 1,
            "description": "The stock exchange filter.",
            "pattern": "\\S"
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "showNumResults": {
            "type": "boolean",
            "description": "Whether Perigon should return an exact result count."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for searching Perigon company entities.",
        "anyOf": [
          {
            "required": [
              "q"
            ]
          },
          {
            "required": [
              "name"
            ]
          },
          {
            "required": [
              "domain"
            ]
          },
          {
            "required": [
              "symbol"
            ]
          },
          {
            "required": [
              "id"
            ]
          },
          {
            "required": [
              "industry"
            ]
          },
          {
            "required": [
              "sector"
            ]
          },
          {
            "required": [
              "country"
            ]
          },
          {
            "required": [
              "exchange"
            ]
          }
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "numResults": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The result count returned by Perigon when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The company objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "numResults",
          "results",
          "raw"
        ],
        "description": "The normalized Perigon company search response."
      }
    },
    {
      "id": "perigon.search_journalists",
      "service": "perigon",
      "name": "search_journalists",
      "description": "Search Perigon journalist profiles by name, Twitter handle, post volume, and update date.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The journalist search query.",
            "pattern": "\\S"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to journalist names.",
            "pattern": "\\S"
          },
          "twitter": {
            "type": "string",
            "minLength": 1,
            "description": "The exact Twitter or X handle without the at sign.",
            "pattern": "\\S"
          },
          "minMonthlyPosts": {
            "type": "integer",
            "minimum": 0,
            "description": "The minimum monthly article count."
          },
          "maxMonthlyPosts": {
            "type": "integer",
            "minimum": 0,
            "description": "The maximum monthly article count."
          },
          "updatedAtFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest journalist profile update date or date-time.",
            "pattern": "\\S"
          },
          "updatedAtTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest journalist profile update date or date-time.",
            "pattern": "\\S"
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "showNumResults": {
            "type": "boolean",
            "description": "Whether Perigon should return an exact result count."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for searching Perigon journalist profiles.",
        "anyOf": [
          {
            "required": [
              "q"
            ]
          },
          {
            "required": [
              "name"
            ]
          },
          {
            "required": [
              "twitter"
            ]
          },
          {
            "required": [
              "minMonthlyPosts"
            ]
          },
          {
            "required": [
              "maxMonthlyPosts"
            ]
          },
          {
            "required": [
              "updatedAtFrom"
            ]
          },
          {
            "required": [
              "updatedAtTo"
            ]
          }
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "numResults": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The result count returned by Perigon when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The journalist objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "numResults",
          "results",
          "raw"
        ],
        "description": "The normalized Perigon journalist search response."
      }
    },
    {
      "id": "perigon.search_people",
      "service": "perigon",
      "name": "search_people",
      "description": "Search Perigon people entities for Wikidata-backed profile metadata.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The person search query.",
            "pattern": "\\S"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to person names.",
            "pattern": "\\S"
          },
          "wikidataId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Wikidata person ID.",
              "pattern": "\\S"
            },
            "description": "The Wikidata person IDs to include.",
            "minItems": 1
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "showNumResults": {
            "type": "boolean",
            "description": "Whether Perigon should return an exact result count."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for searching Perigon people entities.",
        "anyOf": [
          {
            "required": [
              "q"
            ]
          },
          {
            "required": [
              "name"
            ]
          },
          {
            "required": [
              "wikidataId"
            ]
          }
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "numResults": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The result count returned by Perigon when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The people objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "numResults",
          "results",
          "raw"
        ],
        "description": "The normalized Perigon people search response."
      }
    },
    {
      "id": "perigon.search_sources",
      "service": "perigon",
      "name": "search_sources",
      "description": "Search Perigon media sources by domain, source group, traffic, paywall, and geography filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The source search query.",
            "pattern": "\\S"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to source names or aliases.",
            "pattern": "\\S"
          },
          "sourceGroup": {
            "type": "string",
            "minLength": 1,
            "description": "The curated Perigon source group to include.",
            "pattern": "\\S"
          },
          "domain": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One source domain.",
              "pattern": "\\S"
            },
            "description": "The exact source domains to include.",
            "minItems": 1
          },
          "paywall": {
            "type": "boolean",
            "description": "Whether to filter sources by paywall status."
          },
          "minMonthlyPosts": {
            "type": "integer",
            "minimum": 0,
            "description": "The minimum monthly article count."
          },
          "maxMonthlyPosts": {
            "type": "integer",
            "minimum": 0,
            "description": "The maximum monthly article count."
          },
          "minMonthlyVisits": {
            "type": "integer",
            "minimum": 0,
            "description": "The minimum monthly visit count."
          },
          "maxMonthlyVisits": {
            "type": "integer",
            "minimum": 0,
            "description": "The maximum monthly visit count."
          },
          "showSubdomains": {
            "type": "boolean",
            "description": "Whether subdomains should be returned as separate sources."
          },
          "sourceLat": {
            "type": "number",
            "description": "The latitude used for source geo search."
          },
          "sourceLon": {
            "type": "number",
            "description": "The longitude used for source geo search."
          },
          "sourceMaxDistance": {
            "type": "number",
            "minimum": 0,
            "description": "The source geo-search radius in kilometers."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "createdAt",
              "updatedAt",
              "relevance",
              "count",
              "totalCount"
            ],
            "description": "The source sort order."
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "showNumResults": {
            "type": "boolean",
            "description": "Whether Perigon should return an exact result count."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for searching Perigon media sources.",
        "anyOf": [
          {
            "required": [
              "q"
            ]
          },
          {
            "required": [
              "name"
            ]
          },
          {
            "required": [
              "sourceGroup"
            ]
          },
          {
            "required": [
              "domain"
            ]
          },
          {
            "required": [
              "paywall"
            ]
          },
          {
            "required": [
              "minMonthlyPosts"
            ]
          },
          {
            "required": [
              "maxMonthlyPosts"
            ]
          },
          {
            "required": [
              "minMonthlyVisits"
            ]
          },
          {
            "required": [
              "maxMonthlyVisits"
            ]
          },
          {
            "required": [
              "sourceLat"
            ]
          },
          {
            "required": [
              "sourceLon"
            ]
          }
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "numResults": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The result count returned by Perigon when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The source objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "numResults",
          "results",
          "raw"
        ],
        "description": "The normalized Perigon source search response."
      }
    },
    {
      "id": "perigon.search_stories",
      "service": "perigon",
      "name": "search_stories",
      "description": "Search Perigon story clusters for evolving news narratives and grouped article coverage.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The primary search query using Perigon Boolean search syntax.",
            "pattern": "\\S"
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article titles.",
            "pattern": "\\S"
          },
          "desc": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article descriptions.",
            "pattern": "\\S"
          },
          "content": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article content.",
            "pattern": "\\S"
          },
          "summary": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article summaries.",
            "pattern": "\\S"
          },
          "from": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest publication date or date-time to include.",
            "pattern": "\\S"
          },
          "to": {
            "type": "string",
            "minLength": 1,
            "description": "The latest publication date or date-time to include.",
            "pattern": "\\S"
          },
          "addDateFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest Perigon ingestion date or date-time to include.",
            "pattern": "\\S"
          },
          "addDateTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest Perigon ingestion date or date-time to include.",
            "pattern": "\\S"
          },
          "category": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Perigon category.",
              "pattern": "\\S"
            },
            "description": "The broad news categories to include.",
            "minItems": 1
          },
          "topic": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Perigon topic.",
              "pattern": "\\S"
            },
            "description": "The Perigon topics to include.",
            "minItems": 1
          },
          "source": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One source domain.",
              "pattern": "\\S"
            },
            "description": "The publisher domains or wildcard source patterns to include.",
            "minItems": 1
          },
          "sourceGroup": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One source group.",
              "pattern": "\\S"
            },
            "description": "The curated Perigon source groups to include.",
            "minItems": 1
          },
          "language": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One language code.",
              "pattern": "\\S"
            },
            "description": "The ISO 639 language codes to include.",
            "minItems": 1
          },
          "country": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One country code.",
              "pattern": "\\S"
            },
            "description": "The source country codes to include.",
            "minItems": 1
          },
          "label": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One editorial label.",
              "pattern": "\\S"
            },
            "description": "The editorial labels to include.",
            "minItems": 1
          },
          "medium": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One media type.",
              "pattern": "\\S"
            },
            "description": "The article media types to include.",
            "minItems": 1
          },
          "personName": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One person name.",
              "pattern": "\\S"
            },
            "description": "The exact person names to include.",
            "minItems": 1
          },
          "personWikidataId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Wikidata person ID.",
              "pattern": "\\S"
            },
            "description": "The Wikidata person IDs to include.",
            "minItems": 1
          },
          "companyName": {
            "type": "string",
            "minLength": 1,
            "description": "The exact company name to include.",
            "pattern": "\\S"
          },
          "companyDomain": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One company domain.",
              "pattern": "\\S"
            },
            "description": "The company domains to include.",
            "minItems": 1
          },
          "companyId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One company ID.",
              "pattern": "\\S"
            },
            "description": "The Perigon company IDs to include.",
            "minItems": 1
          },
          "companySymbol": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One stock symbol.",
              "pattern": "\\S"
            },
            "description": "The company stock symbols to include.",
            "minItems": 1
          },
          "journalistId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One journalist ID.",
              "pattern": "\\S"
            },
            "description": "The journalist IDs to include.",
            "minItems": 1
          },
          "author": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One author name.",
              "pattern": "\\S"
            },
            "description": "The author names to include.",
            "minItems": 1
          },
          "clusterId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One story cluster ID.",
              "pattern": "\\S"
            },
            "description": "The story cluster IDs to include.",
            "minItems": 1
          },
          "showReprints": {
            "type": "boolean",
            "description": "Whether wire-service reprints should be included."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "createdAt",
              "updatedAt",
              "relevance",
              "count",
              "totalCount",
              "date",
              "reverseDate",
              "addDate",
              "reverseAddDate",
              "pubDate",
              "refreshDate"
            ],
            "description": "The story sort order."
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "showNumResults": {
            "type": "boolean",
            "description": "Whether Perigon should return an exact result count."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to story names.",
            "pattern": "\\S"
          },
          "initializedFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest story initialization date or date-time to include.",
            "pattern": "\\S"
          },
          "initializedTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest story initialization date or date-time to include.",
            "pattern": "\\S"
          },
          "updatedFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest story update date or date-time to include.",
            "pattern": "\\S"
          },
          "updatedTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest story update date or date-time to include.",
            "pattern": "\\S"
          },
          "minUniqueSources": {
            "type": "integer",
            "minimum": 0,
            "description": "The minimum number of unique sources in a story."
          },
          "minSourceDiversity": {
            "type": "number",
            "minimum": 0,
            "description": "The minimum unique-source to unique-article ratio."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for searching Perigon story clusters.",
        "anyOf": [
          {
            "required": [
              "q"
            ]
          },
          {
            "required": [
              "title"
            ]
          },
          {
            "required": [
              "desc"
            ]
          },
          {
            "required": [
              "content"
            ]
          },
          {
            "required": [
              "summary"
            ]
          },
          {
            "required": [
              "from"
            ]
          },
          {
            "required": [
              "to"
            ]
          },
          {
            "required": [
              "addDateFrom"
            ]
          },
          {
            "required": [
              "addDateTo"
            ]
          },
          {
            "required": [
              "category"
            ]
          },
          {
            "required": [
              "topic"
            ]
          },
          {
            "required": [
              "source"
            ]
          },
          {
            "required": [
              "sourceGroup"
            ]
          },
          {
            "required": [
              "language"
            ]
          },
          {
            "required": [
              "country"
            ]
          },
          {
            "required": [
              "label"
            ]
          },
          {
            "required": [
              "medium"
            ]
          },
          {
            "required": [
              "personName"
            ]
          },
          {
            "required": [
              "personWikidataId"
            ]
          },
          {
            "required": [
              "companyName"
            ]
          },
          {
            "required": [
              "companyDomain"
            ]
          },
          {
            "required": [
              "companyId"
            ]
          },
          {
            "required": [
              "companySymbol"
            ]
          },
          {
            "required": [
              "journalistId"
            ]
          },
          {
            "required": [
              "author"
            ]
          },
          {
            "required": [
              "clusterId"
            ]
          },
          {
            "required": [
              "name"
            ]
          },
          {
            "required": [
              "initializedFrom"
            ]
          },
          {
            "required": [
              "initializedTo"
            ]
          },
          {
            "required": [
              "updatedFrom"
            ]
          },
          {
            "required": [
              "updatedTo"
            ]
          }
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "numResults": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The result count returned by Perigon when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "stories": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The story cluster objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "numResults",
          "stories",
          "raw"
        ],
        "description": "The normalized Perigon story search response."
      }
    },
    {
      "id": "perigon.search_topics",
      "service": "perigon",
      "name": "search_topics",
      "description": "Browse or search Perigon topics used to classify news content.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "The topic name filter.",
            "pattern": "\\S"
          },
          "category": {
            "type": "string",
            "minLength": 1,
            "description": "The parent category filter.",
            "pattern": "\\S"
          },
          "subcategory": {
            "type": "string",
            "minLength": 1,
            "description": "The subcategory filter.",
            "pattern": "\\S"
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for browsing or searching Perigon topics."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "total": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The total number of matching topics when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The topic objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "total",
          "data",
          "raw"
        ],
        "description": "The normalized Perigon topics response."
      }
    },
    {
      "id": "perigon.search_wikipedia",
      "service": "perigon",
      "name": "search_wikipedia",
      "description": "Search Perigon Wikipedia pages by text, identity, category, revision, and pageview filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The Wikipedia search query.",
            "pattern": "\\S"
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to Wikipedia page titles.",
            "pattern": "\\S"
          },
          "summary": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to Wikipedia summaries.",
            "pattern": "\\S"
          },
          "text": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to Wikipedia page text.",
            "pattern": "\\S"
          },
          "reference": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to Wikipedia page references.",
            "pattern": "\\S"
          },
          "scrapedAtFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest Perigon scrape date or date-time to include.",
            "pattern": "\\S"
          },
          "scrapedAtTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest Perigon scrape date or date-time to include.",
            "pattern": "\\S"
          },
          "wikiRevisionFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest Wikipedia revision date or date-time to include.",
            "pattern": "\\S"
          },
          "wikiRevisionTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest Wikipedia revision date or date-time to include.",
            "pattern": "\\S"
          },
          "pageviewsFrom": {
            "type": "integer",
            "minimum": 0,
            "description": "The minimum average daily pageview count."
          },
          "pageviewsTo": {
            "type": "integer",
            "minimum": 0,
            "description": "The maximum average daily pageview count."
          },
          "withPageviews": {
            "type": "boolean",
            "description": "Whether only pages with pageview data should be returned."
          },
          "id": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Perigon page ID.",
              "pattern": "\\S"
            },
            "description": "The Perigon Wikipedia page IDs to include.",
            "minItems": 1
          },
          "sectionId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One section ID.",
              "pattern": "\\S"
            },
            "description": "The Wikipedia section IDs to include.",
            "minItems": 1
          },
          "category": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Wikipedia category.",
              "pattern": "\\S"
            },
            "description": "The Wikipedia categories to include.",
            "minItems": 1
          },
          "wikiCode": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One wiki project code.",
              "pattern": "\\S"
            },
            "description": "The wiki project codes to include.",
            "minItems": 1
          },
          "wikidataId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Wikidata ID.",
              "pattern": "\\S"
            },
            "description": "The Wikidata IDs to include.",
            "minItems": 1
          },
          "wikidataInstanceOfId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One instance-of ID.",
              "pattern": "\\S"
            },
            "description": "The Wikidata instance-of IDs to include.",
            "minItems": 1
          },
          "wikidataInstanceOfLabel": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One instance-of label.",
              "pattern": "\\S"
            },
            "description": "The Wikidata instance-of labels to include.",
            "minItems": 1
          },
          "wikiNamespace": {
            "type": "array",
            "items": {
              "type": "integer",
              "description": "One namespace identifier."
            },
            "description": "The Wikipedia namespaces to include.",
            "minItems": 1
          },
          "wikiPageId": {
            "type": "array",
            "items": {
              "type": "integer",
              "description": "One Wikipedia page ID."
            },
            "description": "The Wikipedia page IDs to include.",
            "minItems": 1
          },
          "wikiRevisionId": {
            "type": "array",
            "items": {
              "type": "integer",
              "description": "One revision ID."
            },
            "description": "The Wikipedia revision IDs to include.",
            "minItems": 1
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "relevance",
              "revisionTsDesc",
              "revisionTsAsc",
              "pageViewsDesc",
              "pageViewsAsc",
              "scrapedAtDesc",
              "scrapedAtAsc"
            ],
            "description": "The Wikipedia sort order."
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "showNumResults": {
            "type": "boolean",
            "description": "Whether Perigon should return an exact result count."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for searching Perigon Wikipedia pages.",
        "anyOf": [
          {
            "required": [
              "q"
            ]
          },
          {
            "required": [
              "title"
            ]
          },
          {
            "required": [
              "summary"
            ]
          },
          {
            "required": [
              "text"
            ]
          },
          {
            "required": [
              "reference"
            ]
          },
          {
            "required": [
              "id"
            ]
          },
          {
            "required": [
              "sectionId"
            ]
          },
          {
            "required": [
              "category"
            ]
          },
          {
            "required": [
              "wikiCode"
            ]
          },
          {
            "required": [
              "wikidataId"
            ]
          },
          {
            "required": [
              "wikidataInstanceOfId"
            ]
          },
          {
            "required": [
              "wikidataInstanceOfLabel"
            ]
          },
          {
            "required": [
              "wikiNamespace"
            ]
          },
          {
            "required": [
              "wikiPageId"
            ]
          },
          {
            "required": [
              "wikiRevisionId"
            ]
          }
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "numResults": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The result count returned by Perigon when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The Wikipedia page objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "numResults",
          "results",
          "raw"
        ],
        "description": "The normalized Perigon Wikipedia search response."
      }
    },
    {
      "id": "perigon.summarize_news",
      "service": "perigon",
      "name": "summarize_news",
      "description": "Generate an AI summary over Perigon news articles matching the supplied filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "minLength": 1,
            "description": "The primary search query using Perigon Boolean search syntax.",
            "pattern": "\\S"
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article titles.",
            "pattern": "\\S"
          },
          "desc": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article descriptions.",
            "pattern": "\\S"
          },
          "content": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article content.",
            "pattern": "\\S"
          },
          "summary": {
            "type": "string",
            "minLength": 1,
            "description": "A search query scoped to article summaries.",
            "pattern": "\\S"
          },
          "from": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest publication date or date-time to include.",
            "pattern": "\\S"
          },
          "to": {
            "type": "string",
            "minLength": 1,
            "description": "The latest publication date or date-time to include.",
            "pattern": "\\S"
          },
          "addDateFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest Perigon ingestion date or date-time to include.",
            "pattern": "\\S"
          },
          "addDateTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest Perigon ingestion date or date-time to include.",
            "pattern": "\\S"
          },
          "category": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Perigon category.",
              "pattern": "\\S"
            },
            "description": "The broad news categories to include.",
            "minItems": 1
          },
          "topic": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Perigon topic.",
              "pattern": "\\S"
            },
            "description": "The Perigon topics to include.",
            "minItems": 1
          },
          "source": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One source domain.",
              "pattern": "\\S"
            },
            "description": "The publisher domains or wildcard source patterns to include.",
            "minItems": 1
          },
          "sourceGroup": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One source group.",
              "pattern": "\\S"
            },
            "description": "The curated Perigon source groups to include.",
            "minItems": 1
          },
          "language": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One language code.",
              "pattern": "\\S"
            },
            "description": "The ISO 639 language codes to include.",
            "minItems": 1
          },
          "country": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One country code.",
              "pattern": "\\S"
            },
            "description": "The source country codes to include.",
            "minItems": 1
          },
          "label": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One editorial label.",
              "pattern": "\\S"
            },
            "description": "The editorial labels to include.",
            "minItems": 1
          },
          "medium": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One media type.",
              "pattern": "\\S"
            },
            "description": "The article media types to include.",
            "minItems": 1
          },
          "personName": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One person name.",
              "pattern": "\\S"
            },
            "description": "The exact person names to include.",
            "minItems": 1
          },
          "personWikidataId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One Wikidata person ID.",
              "pattern": "\\S"
            },
            "description": "The Wikidata person IDs to include.",
            "minItems": 1
          },
          "companyName": {
            "type": "string",
            "minLength": 1,
            "description": "The exact company name to include.",
            "pattern": "\\S"
          },
          "companyDomain": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One company domain.",
              "pattern": "\\S"
            },
            "description": "The company domains to include.",
            "minItems": 1
          },
          "companyId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One company ID.",
              "pattern": "\\S"
            },
            "description": "The Perigon company IDs to include.",
            "minItems": 1
          },
          "companySymbol": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One stock symbol.",
              "pattern": "\\S"
            },
            "description": "The company stock symbols to include.",
            "minItems": 1
          },
          "journalistId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One journalist ID.",
              "pattern": "\\S"
            },
            "description": "The journalist IDs to include.",
            "minItems": 1
          },
          "author": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One author name.",
              "pattern": "\\S"
            },
            "description": "The author names to include.",
            "minItems": 1
          },
          "clusterId": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "description": "One story cluster ID.",
              "pattern": "\\S"
            },
            "description": "The story cluster IDs to include.",
            "minItems": 1
          },
          "showReprints": {
            "type": "boolean",
            "description": "Whether wire-service reprints should be included."
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "relevance",
              "date",
              "reverseDate",
              "addDate",
              "reverseAddDate",
              "pubDate",
              "refreshDate"
            ],
            "description": "The article sort order."
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "showNumResults": {
            "type": "boolean",
            "description": "Whether Perigon should return an exact result count."
          },
          "prompt": {
            "type": "string",
            "maxLength": 2048,
            "description": "Instructions guiding the generated summary."
          },
          "maxArticleCount": {
            "type": "integer",
            "minimum": 1,
            "description": "The maximum number of matching articles to summarize."
          },
          "returnedArticleCount": {
            "type": "integer",
            "minimum": 0,
            "description": "The maximum number of source articles to return."
          },
          "maxTokens": {
            "type": "integer",
            "minimum": 1,
            "description": "The maximum generated-token budget for the summary."
          },
          "temperature": {
            "type": "number",
            "minimum": 0,
            "maximum": 2,
            "description": "The model sampling temperature."
          },
          "topP": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "The nucleus sampling value."
          },
          "model": {
            "type": "string",
            "minLength": 1,
            "description": "The Perigon-supported language model to use.",
            "pattern": "\\S"
          },
          "method": {
            "type": "string",
            "enum": [
              "ARTICLES",
              "CLUSTERS"
            ],
            "description": "The article selection method."
          },
          "summarizeFields": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "TITLE",
                "CONTENT",
                "SUMMARY"
              ],
              "description": "One summarization source field."
            },
            "description": "The article fields Perigon should include in the summarization context.",
            "minItems": 1,
            "maxItems": 3
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for summarizing matching Perigon news articles.",
        "anyOf": [
          {
            "required": [
              "q"
            ]
          },
          {
            "required": [
              "title"
            ]
          },
          {
            "required": [
              "desc"
            ]
          },
          {
            "required": [
              "content"
            ]
          },
          {
            "required": [
              "summary"
            ]
          },
          {
            "required": [
              "from"
            ]
          },
          {
            "required": [
              "to"
            ]
          },
          {
            "required": [
              "addDateFrom"
            ]
          },
          {
            "required": [
              "addDateTo"
            ]
          },
          {
            "required": [
              "category"
            ]
          },
          {
            "required": [
              "topic"
            ]
          },
          {
            "required": [
              "source"
            ]
          },
          {
            "required": [
              "sourceGroup"
            ]
          },
          {
            "required": [
              "language"
            ]
          },
          {
            "required": [
              "country"
            ]
          },
          {
            "required": [
              "label"
            ]
          },
          {
            "required": [
              "medium"
            ]
          },
          {
            "required": [
              "personName"
            ]
          },
          {
            "required": [
              "personWikidataId"
            ]
          },
          {
            "required": [
              "companyName"
            ]
          },
          {
            "required": [
              "companyDomain"
            ]
          },
          {
            "required": [
              "companyId"
            ]
          },
          {
            "required": [
              "companySymbol"
            ]
          },
          {
            "required": [
              "journalistId"
            ]
          },
          {
            "required": [
              "author"
            ]
          },
          {
            "required": [
              "clusterId"
            ]
          }
        ]
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "numResults": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "The result count returned by Perigon when available."
              },
              {
                "type": "null"
              }
            ]
          },
          "summary": {
            "anyOf": [
              {
                "type": "string",
                "description": "The AI-generated news summary returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The source article objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "numResults",
          "summary",
          "results",
          "raw"
        ],
        "description": "The normalized Perigon summary response."
      }
    },
    {
      "id": "perigon.vector_search_news",
      "service": "perigon",
      "name": "vector_search_news",
      "description": "Run semantic vector search over recent Perigon news articles with optional structured filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "minLength": 1,
            "description": "The natural-language prompt for semantic news search.",
            "pattern": "\\S"
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "pubDateFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest article publication date or date-time to include.",
            "pattern": "\\S"
          },
          "pubDateTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest article publication date or date-time to include.",
            "pattern": "\\S"
          },
          "showReprints": {
            "type": "boolean",
            "description": "Whether wire-service reprints should be included."
          },
          "filter": {
            "type": "object",
            "additionalProperties": true,
            "description": "A Perigon vector-search filter object with direct fields or nested AND, OR, and NOT clauses."
          }
        },
        "additionalProperties": false,
        "required": [
          "prompt"
        ],
        "description": "Input parameters for Perigon semantic news vector search."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The scored vector-search result objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "results",
          "raw"
        ],
        "description": "The normalized Perigon vector-search response."
      }
    },
    {
      "id": "perigon.vector_search_wikipedia",
      "service": "perigon",
      "name": "vector_search_wikipedia",
      "description": "Run semantic vector search over Perigon Wikipedia content with optional structured filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "prompt": {
            "type": "string",
            "minLength": 1,
            "description": "The natural-language prompt for semantic Wikipedia search.",
            "pattern": "\\S"
          },
          "page": {
            "type": "integer",
            "minimum": 0,
            "description": "The zero-based page number to retrieve."
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "The number of results to return per page."
          },
          "pageviewsFrom": {
            "type": "integer",
            "minimum": 0,
            "description": "The minimum average daily pageview count."
          },
          "pageviewsTo": {
            "type": "integer",
            "minimum": 0,
            "description": "The maximum average daily pageview count."
          },
          "wikiRevisionFrom": {
            "type": "string",
            "minLength": 1,
            "description": "The earliest Wikipedia revision date or date-time to include.",
            "pattern": "\\S"
          },
          "wikiRevisionTo": {
            "type": "string",
            "minLength": 1,
            "description": "The latest Wikipedia revision date or date-time to include.",
            "pattern": "\\S"
          },
          "filter": {
            "type": "object",
            "additionalProperties": true,
            "description": "A Perigon vector-search filter object with direct fields or nested AND, OR, and NOT clauses."
          }
        },
        "additionalProperties": false,
        "required": [
          "prompt"
        ],
        "description": "Input parameters for Perigon semantic Wikipedia vector search."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "integer",
                "description": "The status code returned by Perigon."
              },
              {
                "type": "null"
              }
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true,
              "description": "One Perigon result object."
            },
            "description": "The scored vector-search result objects returned by Perigon."
          },
          "raw": {
            "type": "object",
            "additionalProperties": true,
            "description": "The raw Perigon response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "status",
          "results",
          "raw"
        ],
        "description": "The normalized Perigon vector-search response."
      }
    }
  ]
}
