{
  "service": "v2ex",
  "displayName": "V2EX",
  "categories": [
    "Social",
    "Developer Tools"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "Personal Access Token",
      "placeholder": "V2EX personal access token",
      "description": "V2EX Personal Access Token used as a Bearer token for API 2.0 requests. Create or manage tokens from your V2EX token settings.",
      "extraFields": []
    }
  ],
  "homepageUrl": "https://www.v2ex.com",
  "actions": [
    {
      "id": "v2ex.boost_topic",
      "service": "v2ex",
      "name": "boost_topic",
      "description": "Boost one of the authenticated member's V2EX topics to the homepage.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The V2EX numeric identifier."
          }
        },
        "additionalProperties": false,
        "required": [
          "topic_id"
        ],
        "description": "Input parameters for boosting a V2EX topic."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Whether the V2EX request was accepted."
          }
        },
        "additionalProperties": false,
        "required": [
          "success"
        ],
        "description": "The empty response returned after V2EX accepts the request."
      }
    },
    {
      "id": "v2ex.create_token",
      "service": "v2ex",
      "name": "create_token",
      "description": "Create a new V2EX Personal Access Token from an existing token.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "scope": {
            "type": "string",
            "enum": [
              "everything",
              "regular"
            ],
            "description": "The access scope for the new V2EX token."
          },
          "expiration": {
            "anyOf": [
              {
                "const": 2592000,
                "type": "number",
                "description": "A 30-day token lifetime in seconds."
              },
              {
                "const": 5184000,
                "type": "number",
                "description": "A 60-day token lifetime in seconds."
              },
              {
                "const": 7776000,
                "type": "number",
                "description": "A 90-day token lifetime in seconds."
              },
              {
                "const": 15552000,
                "type": "number",
                "description": "A 180-day token lifetime in seconds."
              }
            ],
            "description": "The token lifetime in seconds."
          }
        },
        "additionalProperties": false,
        "required": [
          "scope",
          "expiration"
        ],
        "description": "Input parameters for creating a V2EX Personal Access Token."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "The newly created Personal Access Token value."
          }
        },
        "additionalProperties": false,
        "required": [
          "token"
        ],
        "description": "The V2EX token creation response."
      }
    },
    {
      "id": "v2ex.delete_notification",
      "service": "v2ex",
      "name": "delete_notification",
      "description": "Delete one V2EX notification by its numeric identifier.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "notification_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The V2EX numeric identifier."
          }
        },
        "additionalProperties": false,
        "required": [
          "notification_id"
        ],
        "description": "Input parameters for deleting a V2EX notification."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Whether the V2EX request was accepted."
          }
        },
        "additionalProperties": false,
        "required": [
          "success"
        ],
        "description": "The empty response returned after V2EX accepts the request."
      }
    },
    {
      "id": "v2ex.get_current_member",
      "service": "v2ex",
      "name": "get_current_member",
      "description": "Fetch the authenticated V2EX member profile.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "Input parameters for fetching the authenticated V2EX member."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "member": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer",
                "description": "The V2EX member identifier."
              },
              "username": {
                "type": "string",
                "description": "The V2EX username."
              },
              "url": {
                "type": "string",
                "description": "The V2EX URL for the member profile.",
                "format": "uri"
              },
              "website": {
                "type": "string",
                "description": "The member website URL or empty string."
              },
              "twitter": {
                "type": "string",
                "description": "The member Twitter handle or empty string."
              },
              "psn": {
                "type": "string",
                "description": "The member PlayStation Network handle or empty string."
              },
              "github": {
                "type": "string",
                "description": "The member GitHub username or profile value."
              },
              "btc": {
                "type": "string",
                "description": "The member Bitcoin address or empty string."
              },
              "location": {
                "type": "string",
                "description": "The member location or empty string."
              },
              "tagline": {
                "type": "string",
                "description": "The member tagline or empty string."
              },
              "bio": {
                "type": "string",
                "description": "The member biography text."
              },
              "avatar_mini": {
                "type": "string",
                "description": "The mini avatar URL.",
                "format": "uri"
              },
              "avatar_normal": {
                "type": "string",
                "description": "The normal avatar URL.",
                "format": "uri"
              },
              "avatar_large": {
                "type": "string",
                "description": "The large avatar URL.",
                "format": "uri"
              },
              "created": {
                "type": "integer",
                "description": "The Unix timestamp when the member account was created."
              },
              "last_modified": {
                "type": "integer",
                "description": "The Unix timestamp when the profile was last modified."
              },
              "pro": {
                "type": "integer",
                "description": "Whether the member has V2EX Pro status as returned by V2EX."
              }
            },
            "additionalProperties": true,
            "description": "The authenticated V2EX member profile."
          }
        },
        "additionalProperties": false,
        "required": [
          "member"
        ],
        "description": "The V2EX member profile response."
      }
    },
    {
      "id": "v2ex.get_current_token",
      "service": "v2ex",
      "name": "get_current_token",
      "description": "Fetch metadata for the V2EX Personal Access Token used by this connection.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "Input parameters for fetching current V2EX token metadata."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "token": {
            "type": "object",
            "properties": {
              "token": {
                "type": "string",
                "description": "The token value as returned by V2EX. It may be masked after creation."
              },
              "scope": {
                "type": "string",
                "enum": [
                  "everything",
                  "regular"
                ],
                "description": "The token scope."
              },
              "expiration": {
                "type": "integer",
                "description": "The token lifetime in seconds."
              },
              "good_for_days": {
                "type": "integer",
                "description": "The remaining token lifetime in days."
              },
              "total_used": {
                "type": "integer",
                "description": "The total number of times the token has been used."
              },
              "last_used": {
                "type": "integer",
                "description": "The Unix timestamp when the token was last used."
              },
              "created": {
                "type": "integer",
                "description": "The Unix timestamp when the token was created."
              }
            },
            "additionalProperties": true,
            "description": "Metadata for a V2EX Personal Access Token."
          }
        },
        "additionalProperties": false,
        "required": [
          "token"
        ],
        "description": "The V2EX token metadata response."
      }
    },
    {
      "id": "v2ex.get_node",
      "service": "v2ex",
      "name": "get_node",
      "description": "Fetch a V2EX node by node name.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "node_name": {
            "type": "string",
            "minLength": 1,
            "description": "The V2EX node name, such as `python`."
          }
        },
        "additionalProperties": false,
        "required": [
          "node_name"
        ],
        "description": "Input parameters for fetching a V2EX node."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "node": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer",
                "description": "The V2EX node identifier."
              },
              "founder_id": {
                "type": "integer",
                "description": "The member identifier of the node founder."
              },
              "url": {
                "type": "string",
                "description": "The V2EX URL for the node.",
                "format": "uri"
              },
              "name": {
                "type": "string",
                "description": "The V2EX node name."
              },
              "title": {
                "type": "string",
                "description": "The human-readable node title."
              },
              "header": {
                "type": "string",
                "description": "The node header text."
              },
              "footer": {
                "type": "string",
                "description": "The node footer text."
              },
              "avatar": {
                "type": "string",
                "description": "The node avatar URL.",
                "format": "uri"
              },
              "topics": {
                "type": "integer",
                "description": "The number of topics in the node."
              },
              "created": {
                "type": "integer",
                "description": "The Unix timestamp when the node was created."
              },
              "last_modified": {
                "type": "integer",
                "description": "The Unix timestamp when the node was last modified."
              }
            },
            "additionalProperties": true,
            "description": "A V2EX node object."
          }
        },
        "additionalProperties": false,
        "required": [
          "node"
        ],
        "description": "The V2EX node response."
      }
    },
    {
      "id": "v2ex.get_topic",
      "service": "v2ex",
      "name": "get_topic",
      "description": "Fetch a V2EX topic by numeric identifier.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The V2EX numeric identifier."
          }
        },
        "additionalProperties": false,
        "required": [
          "topic_id"
        ],
        "description": "Input parameters for fetching a V2EX topic."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "topic": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer",
                "description": "The V2EX topic identifier."
              },
              "title": {
                "type": "string",
                "description": "The topic title."
              },
              "content": {
                "type": "string",
                "description": "The raw topic content."
              },
              "content_rendered": {
                "type": "string",
                "description": "The rendered topic content."
              },
              "syntax": {
                "type": "integer",
                "description": "The content syntax mode returned by V2EX."
              },
              "url": {
                "type": "string",
                "description": "The V2EX URL for the topic.",
                "format": "uri"
              },
              "replies": {
                "type": "integer",
                "description": "The number of replies on the topic."
              },
              "stars": {
                "type": "integer",
                "description": "The number of stars on the topic."
              },
              "thanks": {
                "type": "integer",
                "description": "The number of thanks on the topic."
              },
              "last_reply_by": {
                "type": "string",
                "description": "The username of the latest reply author, or empty string."
              },
              "created": {
                "type": "integer",
                "description": "The Unix timestamp when the topic was created."
              },
              "last_modified": {
                "type": "integer",
                "description": "The Unix timestamp when the topic was last modified."
              },
              "last_touched": {
                "type": "integer",
                "description": "The Unix timestamp when the topic was last touched."
              },
              "member": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer",
                    "description": "The V2EX member identifier."
                  },
                  "username": {
                    "type": "string",
                    "description": "The V2EX username."
                  },
                  "bio": {
                    "type": "string",
                    "description": "The member biography text."
                  },
                  "website": {
                    "type": "string",
                    "description": "The member website URL or empty string."
                  },
                  "github": {
                    "type": "string",
                    "description": "The member GitHub username or profile value."
                  },
                  "url": {
                    "type": "string",
                    "description": "The V2EX URL for the member profile.",
                    "format": "uri"
                  },
                  "avatar": {
                    "type": "string",
                    "description": "The member avatar URL.",
                    "format": "uri"
                  },
                  "created": {
                    "type": "integer",
                    "description": "The Unix timestamp when the member account was created."
                  },
                  "pro": {
                    "type": "integer",
                    "description": "Whether the member has V2EX Pro status as returned by V2EX."
                  }
                },
                "additionalProperties": true,
                "description": "A compact V2EX member object."
              },
              "node": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer",
                    "description": "The V2EX node identifier."
                  },
                  "founder_id": {
                    "type": "integer",
                    "description": "The member identifier of the node founder."
                  },
                  "url": {
                    "type": "string",
                    "description": "The V2EX URL for the node.",
                    "format": "uri"
                  },
                  "name": {
                    "type": "string",
                    "description": "The V2EX node name."
                  },
                  "title": {
                    "type": "string",
                    "description": "The human-readable node title."
                  },
                  "header": {
                    "type": "string",
                    "description": "The node header text."
                  },
                  "footer": {
                    "type": "string",
                    "description": "The node footer text."
                  },
                  "avatar": {
                    "type": "string",
                    "description": "The node avatar URL.",
                    "format": "uri"
                  },
                  "topics": {
                    "type": "integer",
                    "description": "The number of topics in the node."
                  },
                  "created": {
                    "type": "integer",
                    "description": "The Unix timestamp when the node was created."
                  },
                  "last_modified": {
                    "type": "integer",
                    "description": "The Unix timestamp when the node was last modified."
                  }
                },
                "additionalProperties": true,
                "description": "A V2EX node object."
              },
              "supplements": {
                "type": "array",
                "items": {
                  "description": "One supplement."
                },
                "description": "Supplement objects attached to the topic."
              }
            },
            "additionalProperties": true,
            "description": "A V2EX topic object."
          }
        },
        "additionalProperties": false,
        "required": [
          "topic"
        ],
        "description": "The V2EX topic response."
      }
    },
    {
      "id": "v2ex.list_hot_topics",
      "service": "v2ex",
      "name": "list_hot_topics",
      "description": "Fetch public hot topics from the V2EX legacy JSON API.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "Input parameters for fetching V2EX legacy hot topics."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "topics": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "The V2EX topic identifier."
                },
                "title": {
                  "type": "string",
                  "description": "The topic title."
                },
                "content": {
                  "type": "string",
                  "description": "The raw topic content."
                },
                "content_rendered": {
                  "type": "string",
                  "description": "The rendered topic content."
                },
                "url": {
                  "type": "string",
                  "description": "The V2EX URL for the topic.",
                  "format": "uri"
                },
                "replies": {
                  "type": "integer",
                  "description": "The number of replies on the topic."
                },
                "deleted": {
                  "type": "integer",
                  "description": "Whether the topic has been deleted as returned by V2EX."
                },
                "last_reply_by": {
                  "type": "string",
                  "description": "The username of the latest reply author, or empty string."
                },
                "created": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was created."
                },
                "last_modified": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was last modified."
                },
                "last_touched": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was last touched."
                },
                "member": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "The V2EX member identifier."
                    },
                    "username": {
                      "type": "string",
                      "description": "The V2EX username."
                    },
                    "url": {
                      "type": "string",
                      "description": "The V2EX URL for the member profile.",
                      "format": "uri"
                    },
                    "website": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member website URL, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "twitter": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member Twitter handle, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "psn": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member PlayStation Network handle, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "github": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member GitHub username, profile value, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "btc": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member Bitcoin address, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "location": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member location, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "tagline": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member tagline, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "bio": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member biography text, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "avatar_mini": {
                      "type": "string",
                      "description": "The mini avatar URL.",
                      "format": "uri"
                    },
                    "avatar_normal": {
                      "type": "string",
                      "description": "The normal avatar URL.",
                      "format": "uri"
                    },
                    "avatar_large": {
                      "type": "string",
                      "description": "The large avatar URL.",
                      "format": "uri"
                    },
                    "avatar_xlarge": {
                      "type": "string",
                      "description": "The extra-large avatar URL.",
                      "format": "uri"
                    },
                    "avatar_xxlarge": {
                      "type": "string",
                      "description": "The double extra-large avatar URL.",
                      "format": "uri"
                    },
                    "avatar_xxxlarge": {
                      "type": "string",
                      "description": "The triple extra-large avatar URL.",
                      "format": "uri"
                    },
                    "created": {
                      "type": "integer",
                      "description": "The Unix timestamp when the member account was created."
                    },
                    "last_modified": {
                      "type": "integer",
                      "description": "The Unix timestamp when the member profile was last modified."
                    },
                    "pro": {
                      "type": "integer",
                      "description": "Whether the member has V2EX Pro status as returned by V2EX."
                    }
                  },
                  "additionalProperties": true,
                  "description": "A member object returned by the V2EX legacy public API."
                },
                "node": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "The V2EX node identifier."
                    },
                    "name": {
                      "type": "string",
                      "description": "The V2EX node name."
                    },
                    "url": {
                      "type": "string",
                      "description": "The V2EX URL for the node.",
                      "format": "uri"
                    },
                    "title": {
                      "type": "string",
                      "description": "The human-readable node title."
                    },
                    "title_alternative": {
                      "type": "string",
                      "description": "The alternative node title."
                    },
                    "header": {
                      "type": "string",
                      "description": "The node header text."
                    },
                    "footer": {
                      "type": "string",
                      "description": "The node footer text."
                    },
                    "topics": {
                      "type": "integer",
                      "description": "The number of topics in the node."
                    },
                    "avatar_mini": {
                      "type": "string",
                      "description": "The mini node avatar URL.",
                      "format": "uri"
                    },
                    "avatar_normal": {
                      "type": "string",
                      "description": "The normal node avatar URL.",
                      "format": "uri"
                    },
                    "avatar_large": {
                      "type": "string",
                      "description": "The large node avatar URL.",
                      "format": "uri"
                    },
                    "stars": {
                      "type": "integer",
                      "description": "The number of stars on the node."
                    },
                    "founder_id": {
                      "type": "integer",
                      "description": "The member identifier of the node founder."
                    },
                    "aliases": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "description": "One node alias."
                      },
                      "description": "Alternative names for the node."
                    },
                    "root": {
                      "type": "boolean",
                      "description": "Whether this node is a root node."
                    },
                    "parent_node_name": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The parent node name, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "additionalProperties": true,
                  "description": "A node object returned by the V2EX legacy public API."
                }
              },
              "additionalProperties": true,
              "description": "A topic object returned by the V2EX legacy public API."
            },
            "description": "The public topics returned by the V2EX legacy endpoint."
          }
        },
        "additionalProperties": false,
        "required": [
          "topics"
        ],
        "description": "The V2EX legacy public topic list response."
      }
    },
    {
      "id": "v2ex.list_latest_topics",
      "service": "v2ex",
      "name": "list_latest_topics",
      "description": "Fetch public latest topics from the V2EX legacy JSON API.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "description": "Input parameters for fetching V2EX legacy latest topics."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "topics": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "The V2EX topic identifier."
                },
                "title": {
                  "type": "string",
                  "description": "The topic title."
                },
                "content": {
                  "type": "string",
                  "description": "The raw topic content."
                },
                "content_rendered": {
                  "type": "string",
                  "description": "The rendered topic content."
                },
                "url": {
                  "type": "string",
                  "description": "The V2EX URL for the topic.",
                  "format": "uri"
                },
                "replies": {
                  "type": "integer",
                  "description": "The number of replies on the topic."
                },
                "deleted": {
                  "type": "integer",
                  "description": "Whether the topic has been deleted as returned by V2EX."
                },
                "last_reply_by": {
                  "type": "string",
                  "description": "The username of the latest reply author, or empty string."
                },
                "created": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was created."
                },
                "last_modified": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was last modified."
                },
                "last_touched": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was last touched."
                },
                "member": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "The V2EX member identifier."
                    },
                    "username": {
                      "type": "string",
                      "description": "The V2EX username."
                    },
                    "url": {
                      "type": "string",
                      "description": "The V2EX URL for the member profile.",
                      "format": "uri"
                    },
                    "website": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member website URL, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "twitter": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member Twitter handle, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "psn": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member PlayStation Network handle, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "github": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member GitHub username, profile value, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "btc": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member Bitcoin address, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "location": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member location, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "tagline": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member tagline, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "bio": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The member biography text, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "avatar_mini": {
                      "type": "string",
                      "description": "The mini avatar URL.",
                      "format": "uri"
                    },
                    "avatar_normal": {
                      "type": "string",
                      "description": "The normal avatar URL.",
                      "format": "uri"
                    },
                    "avatar_large": {
                      "type": "string",
                      "description": "The large avatar URL.",
                      "format": "uri"
                    },
                    "avatar_xlarge": {
                      "type": "string",
                      "description": "The extra-large avatar URL.",
                      "format": "uri"
                    },
                    "avatar_xxlarge": {
                      "type": "string",
                      "description": "The double extra-large avatar URL.",
                      "format": "uri"
                    },
                    "avatar_xxxlarge": {
                      "type": "string",
                      "description": "The triple extra-large avatar URL.",
                      "format": "uri"
                    },
                    "created": {
                      "type": "integer",
                      "description": "The Unix timestamp when the member account was created."
                    },
                    "last_modified": {
                      "type": "integer",
                      "description": "The Unix timestamp when the member profile was last modified."
                    },
                    "pro": {
                      "type": "integer",
                      "description": "Whether the member has V2EX Pro status as returned by V2EX."
                    }
                  },
                  "additionalProperties": true,
                  "description": "A member object returned by the V2EX legacy public API."
                },
                "node": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "The V2EX node identifier."
                    },
                    "name": {
                      "type": "string",
                      "description": "The V2EX node name."
                    },
                    "url": {
                      "type": "string",
                      "description": "The V2EX URL for the node.",
                      "format": "uri"
                    },
                    "title": {
                      "type": "string",
                      "description": "The human-readable node title."
                    },
                    "title_alternative": {
                      "type": "string",
                      "description": "The alternative node title."
                    },
                    "header": {
                      "type": "string",
                      "description": "The node header text."
                    },
                    "footer": {
                      "type": "string",
                      "description": "The node footer text."
                    },
                    "topics": {
                      "type": "integer",
                      "description": "The number of topics in the node."
                    },
                    "avatar_mini": {
                      "type": "string",
                      "description": "The mini node avatar URL.",
                      "format": "uri"
                    },
                    "avatar_normal": {
                      "type": "string",
                      "description": "The normal node avatar URL.",
                      "format": "uri"
                    },
                    "avatar_large": {
                      "type": "string",
                      "description": "The large node avatar URL.",
                      "format": "uri"
                    },
                    "stars": {
                      "type": "integer",
                      "description": "The number of stars on the node."
                    },
                    "founder_id": {
                      "type": "integer",
                      "description": "The member identifier of the node founder."
                    },
                    "aliases": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "description": "One node alias."
                      },
                      "description": "Alternative names for the node."
                    },
                    "root": {
                      "type": "boolean",
                      "description": "Whether this node is a root node."
                    },
                    "parent_node_name": {
                      "anyOf": [
                        {
                          "type": "string",
                          "description": "The parent node name, empty string, or null."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "additionalProperties": true,
                  "description": "A node object returned by the V2EX legacy public API."
                }
              },
              "additionalProperties": true,
              "description": "A topic object returned by the V2EX legacy public API."
            },
            "description": "The public topics returned by the V2EX legacy endpoint."
          }
        },
        "additionalProperties": false,
        "required": [
          "topics"
        ],
        "description": "The V2EX legacy public topic list response."
      }
    },
    {
      "id": "v2ex.list_node_topics",
      "service": "v2ex",
      "name": "list_node_topics",
      "description": "Fetch topics from a V2EX node.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "node_name": {
            "type": "string",
            "minLength": 1,
            "description": "The V2EX node name, such as `python`."
          },
          "p": {
            "type": "integer",
            "minimum": 1,
            "description": "Optional page number to request. Defaults to 1."
          }
        },
        "additionalProperties": false,
        "required": [
          "node_name"
        ],
        "description": "Input parameters for fetching topics from a V2EX node."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "topics": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "The V2EX topic identifier."
                },
                "title": {
                  "type": "string",
                  "description": "The topic title."
                },
                "content": {
                  "type": "string",
                  "description": "The raw topic content."
                },
                "content_rendered": {
                  "type": "string",
                  "description": "The rendered topic content."
                },
                "syntax": {
                  "type": "integer",
                  "description": "The content syntax mode returned by V2EX."
                },
                "url": {
                  "type": "string",
                  "description": "The V2EX URL for the topic.",
                  "format": "uri"
                },
                "replies": {
                  "type": "integer",
                  "description": "The number of replies on the topic."
                },
                "stars": {
                  "type": "integer",
                  "description": "The number of stars on the topic."
                },
                "thanks": {
                  "type": "integer",
                  "description": "The number of thanks on the topic."
                },
                "last_reply_by": {
                  "type": "string",
                  "description": "The username of the latest reply author, or empty string."
                },
                "created": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was created."
                },
                "last_modified": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was last modified."
                },
                "last_touched": {
                  "type": "integer",
                  "description": "The Unix timestamp when the topic was last touched."
                },
                "member": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "The V2EX member identifier."
                    },
                    "username": {
                      "type": "string",
                      "description": "The V2EX username."
                    },
                    "bio": {
                      "type": "string",
                      "description": "The member biography text."
                    },
                    "website": {
                      "type": "string",
                      "description": "The member website URL or empty string."
                    },
                    "github": {
                      "type": "string",
                      "description": "The member GitHub username or profile value."
                    },
                    "url": {
                      "type": "string",
                      "description": "The V2EX URL for the member profile.",
                      "format": "uri"
                    },
                    "avatar": {
                      "type": "string",
                      "description": "The member avatar URL.",
                      "format": "uri"
                    },
                    "created": {
                      "type": "integer",
                      "description": "The Unix timestamp when the member account was created."
                    },
                    "pro": {
                      "type": "integer",
                      "description": "Whether the member has V2EX Pro status as returned by V2EX."
                    }
                  },
                  "additionalProperties": true,
                  "description": "A compact V2EX member object."
                },
                "node": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "The V2EX node identifier."
                    },
                    "founder_id": {
                      "type": "integer",
                      "description": "The member identifier of the node founder."
                    },
                    "url": {
                      "type": "string",
                      "description": "The V2EX URL for the node.",
                      "format": "uri"
                    },
                    "name": {
                      "type": "string",
                      "description": "The V2EX node name."
                    },
                    "title": {
                      "type": "string",
                      "description": "The human-readable node title."
                    },
                    "header": {
                      "type": "string",
                      "description": "The node header text."
                    },
                    "footer": {
                      "type": "string",
                      "description": "The node footer text."
                    },
                    "avatar": {
                      "type": "string",
                      "description": "The node avatar URL.",
                      "format": "uri"
                    },
                    "topics": {
                      "type": "integer",
                      "description": "The number of topics in the node."
                    },
                    "created": {
                      "type": "integer",
                      "description": "The Unix timestamp when the node was created."
                    },
                    "last_modified": {
                      "type": "integer",
                      "description": "The Unix timestamp when the node was last modified."
                    }
                  },
                  "additionalProperties": true,
                  "description": "A V2EX node object."
                },
                "supplements": {
                  "type": "array",
                  "items": {
                    "description": "One supplement."
                  },
                  "description": "Supplement objects attached to the topic."
                }
              },
              "additionalProperties": true,
              "description": "A V2EX topic object."
            },
            "description": "The topics returned for this node page."
          }
        },
        "additionalProperties": false,
        "required": [
          "topics"
        ],
        "description": "The V2EX node topics response."
      }
    },
    {
      "id": "v2ex.list_notifications",
      "service": "v2ex",
      "name": "list_notifications",
      "description": "Fetch the latest V2EX notifications for the authenticated member.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "p": {
            "type": "integer",
            "minimum": 1,
            "description": "Optional page number to request. Defaults to 1."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for fetching V2EX notifications."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "notifications": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "The V2EX notification identifier."
                },
                "member_id": {
                  "type": "integer",
                  "description": "The member identifier that triggered the notification."
                },
                "for_member_id": {
                  "type": "integer",
                  "description": "The member identifier that received the notification."
                },
                "text": {
                  "type": "string",
                  "description": "The notification text."
                },
                "payload": {
                  "anyOf": [
                    {
                      "type": "string",
                      "description": "The notification payload string."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "payload_rendered": {
                  "type": "string",
                  "description": "The rendered notification payload."
                },
                "created": {
                  "type": "integer",
                  "description": "The Unix timestamp when the notification was created."
                },
                "member": {
                  "type": "object",
                  "properties": {},
                  "additionalProperties": true,
                  "description": "The member object associated with the notification."
                }
              },
              "additionalProperties": true,
              "description": "A V2EX notification object."
            },
            "description": "The notifications returned for this page."
          },
          "total": {
            "type": "integer",
            "description": "The total notification count parsed from the V2EX pagination message."
          }
        },
        "additionalProperties": false,
        "required": [
          "notifications",
          "total"
        ],
        "description": "The V2EX notifications response."
      }
    },
    {
      "id": "v2ex.list_topic_replies",
      "service": "v2ex",
      "name": "list_topic_replies",
      "description": "Fetch replies for a V2EX topic.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The V2EX numeric identifier."
          },
          "p": {
            "type": "integer",
            "minimum": 1,
            "description": "Optional page number to request. Defaults to 1."
          }
        },
        "additionalProperties": false,
        "required": [
          "topic_id"
        ],
        "description": "Input parameters for fetching replies for a V2EX topic."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "replies": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "The V2EX reply identifier."
                },
                "content": {
                  "type": "string",
                  "description": "The raw reply content."
                },
                "content_rendered": {
                  "type": "string",
                  "description": "The rendered reply content."
                },
                "created": {
                  "type": "integer",
                  "description": "The Unix timestamp when the reply was created."
                },
                "member": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "description": "The V2EX member identifier."
                    },
                    "username": {
                      "type": "string",
                      "description": "The V2EX username."
                    },
                    "bio": {
                      "type": "string",
                      "description": "The member biography text."
                    },
                    "website": {
                      "type": "string",
                      "description": "The member website URL or empty string."
                    },
                    "github": {
                      "type": "string",
                      "description": "The member GitHub username or profile value."
                    },
                    "url": {
                      "type": "string",
                      "description": "The V2EX URL for the member profile.",
                      "format": "uri"
                    },
                    "avatar": {
                      "type": "string",
                      "description": "The member avatar URL.",
                      "format": "uri"
                    },
                    "created": {
                      "type": "integer",
                      "description": "The Unix timestamp when the member account was created."
                    },
                    "pro": {
                      "type": "integer",
                      "description": "Whether the member has V2EX Pro status as returned by V2EX."
                    }
                  },
                  "additionalProperties": true,
                  "description": "A compact V2EX member object."
                }
              },
              "additionalProperties": true,
              "description": "A V2EX topic reply object."
            },
            "description": "The replies returned for this topic page."
          }
        },
        "additionalProperties": false,
        "required": [
          "replies"
        ],
        "description": "The V2EX topic replies response."
      }
    },
    {
      "id": "v2ex.set_topic_sticky",
      "service": "v2ex",
      "name": "set_topic_sticky",
      "description": "Set one of the authenticated member's V2EX topics as sticky.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic_id": {
            "type": "integer",
            "minimum": 1,
            "description": "The V2EX numeric identifier."
          },
          "duration": {
            "type": "string",
            "enum": [
              "15min",
              "1hr",
              "8hr"
            ],
            "description": "Optional sticky duration. Defaults to 15min."
          }
        },
        "additionalProperties": false,
        "required": [
          "topic_id"
        ],
        "description": "Input parameters for setting a V2EX topic as sticky."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Whether the V2EX request was accepted."
          }
        },
        "additionalProperties": false,
        "required": [
          "success"
        ],
        "description": "The empty response returned after V2EX accepts the request."
      }
    }
  ]
}
