firecrawl-toolkit 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,141 @@
1
+ Metadata-Version: 2.4
2
+ Name: firecrawl-toolkit
3
+ Version: 0.0.1
4
+ Summary: A high-performance, asynchronous MCP server for Firecrawl Search, featuring connection pooling, request retries, and intelligent input parsing.
5
+ Author-email: "Joey.Kot" <joey.kot.x@gmail.com>
6
+ Keywords: firecrawl,mcp,server,google,search
7
+ Requires-Python: >=3.12
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: httpx>=0.28.1
10
+ Requires-Dist: h2>=4.2.0
11
+ Requires-Dist: dotenv>=0.9.9
12
+ Requires-Dist: mcp>=1.9.4
13
+
14
+ # Firecrawl MCP Toolkit
15
+
16
+ A high-performance, asynchronous MCP server that provides comprehensive Google search and web content scraping capabilities through the Firecrawl API (excluding some rarely used interfaces).
17
+
18
+ This project is built on `httpx`, utilizing asynchronous clients and connection pool management to offer LLMs a stable and efficient external information retrieval tool.
19
+
20
+ ## Key Features
21
+
22
+ - **Asynchronous Architecture**: Fully based on `asyncio` and `httpx`, ensuring high throughput and non-blocking I/O operations.
23
+ - **HTTP Connection Pool**: Manages and reuses TCP connections through a global `httpx.AsyncClient` instance, significantly improving performance under high concurrency.
24
+ - **Concurrency Control**: Built-in global and per-API endpoint concurrency semaphores effectively manage API request rates to prevent exceeding rate limits.
25
+ - **Automatic Retry Mechanism**: Integrated request retry functionality with exponential backoff strategy automatically handles temporary network fluctuations or server errors, enhancing service stability.
26
+ - **Intelligent Country Code Parsing**: Includes a comprehensive country name dictionary supporting inputs in Chinese, English, ISO Alpha-2/3, and other formats, with automatic normalization.
27
+ - **Flexible Environment Variable Configuration**: Supports fine-tuned service configuration via environment variables.
28
+
29
+ ## Available Tools
30
+
31
+ This service provides the following tools:
32
+
33
+ | Tool Name | Description |
34
+ | ------------------------ | -------------------------------------------- |
35
+ | `firecrawl-search` | Performs general Google web / news / images searches. |
36
+ | `firecrawl-scrape` | Scrapes and returns the content of a specified URL. |
37
+
38
+ ## Installation Guide
39
+
40
+ It is recommended to install using `pip` or `uv`.
41
+
42
+ ```bash
43
+ # Using pip
44
+ pip install firecrawl-toolkit
45
+
46
+ # Or using uv
47
+ uv pip install firecrawl-toolkit
48
+ ```
49
+
50
+ ## Quick Start
51
+
52
+ ### Set Environment Variables
53
+
54
+ Create a `.env` file in the project root directory and enter your Firecrawl API key:
55
+
56
+ ```bash
57
+ FIRECRAWL_API_KEY="your-firecrawl-api-key-here"
58
+ ```
59
+
60
+ ### Configure MCP Client
61
+
62
+ Add the following server configuration in the MCP client configuration file:
63
+
64
+ ```json
65
+ {
66
+ "mcpServers": {
67
+ "firecrawl": {
68
+ "command": "python3",
69
+ "args": ["-m", "firecrawl-toolkit"],
70
+ "env": {
71
+ "FIRECRAWL_API_KEY": "<Your Firecrawl API key>"
72
+ }
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+ ```json
79
+ {
80
+ "mcpServers": {
81
+ "firecrawl": {
82
+ "command": "uvx",
83
+ "args": ["firecrawl-toolkit"],
84
+ "env": {
85
+ "FIRECRAWL_API_KEY": "<Your Firecrawl API key>"
86
+ }
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ ### Environment Variables
93
+
94
+ - `FIRECRAWL_MAX_CONNECTIONS`: Maximum number of HTTP client connections (default: 200).
95
+ - `FIRECRAWL_KEEPALIVE`: Maximum number of keep-alive HTTP client connections (default: 20).
96
+ - `FIRECRAWL_HTTP2`: Enable HTTP/2 (default: "0", set to "1" to enable).
97
+ - `FIRECRAWL_MAX_CONCURRENT_REQUESTS`: Global maximum concurrent requests (default: 200).
98
+ - `FIRECRAWL_RETRY_COUNT`: Maximum retry attempts for failed requests (default: 3).
99
+ - `FIRECRAWL_RETRY_BASE_DELAY`: Base delay time for retries in seconds (default: 0.5).
100
+ - `FIRECRAWL_ENDPOINT_CONCURRENCY`: Set concurrency per endpoint (JSON format), e.g., {"search":10,"scrape":2}.
101
+ - `FIRECRAWL_ENDPOINT_RETRYABLE`: Set retry allowance per endpoint (JSON format), e.g., {"scrape": false}.
102
+
103
+ ## Tool Parameters and Usage Examples
104
+
105
+ ### firecrawl-search: Perform web / news / images search
106
+
107
+ Parameters:
108
+
109
+ - `query` (str, required): Keywords to search.
110
+ - `country` (str, optional): Specify the country/region for search results. Supports Chinese names (e.g., "China"), English names (e.g., "United States"), or ISO codes (e.g., "US"). Default is "US".
111
+ - `search_num` (int, optional): Number of results to return, range 1-100. Default is 10.
112
+ - `search_time` (str, optional): Filter results by time range. Available values: "hour", "day", "week", "month", "year".
113
+
114
+ Example:
115
+
116
+ ```Python
117
+ result_json = firecrawl_general_search(
118
+ query="AI advancements 2024",
119
+ country="United States",
120
+ search_num=5,
121
+ search_time="month"
122
+ )
123
+ ```
124
+
125
+ ### firecrawl-scrape: Scrape webpage content
126
+
127
+ Parameters:
128
+
129
+ - `url` (str, required): URL of the target webpage.
130
+
131
+ Example:
132
+
133
+ ```Python
134
+ result_json = firecrawl_scrape(
135
+ url="https://www.example.com"
136
+ )
137
+ ```
138
+
139
+ ## License Agreement
140
+
141
+ This project is licensed under the MIT License.
@@ -0,0 +1,128 @@
1
+ # Firecrawl MCP Toolkit
2
+
3
+ A high-performance, asynchronous MCP server that provides comprehensive Google search and web content scraping capabilities through the Firecrawl API (excluding some rarely used interfaces).
4
+
5
+ This project is built on `httpx`, utilizing asynchronous clients and connection pool management to offer LLMs a stable and efficient external information retrieval tool.
6
+
7
+ ## Key Features
8
+
9
+ - **Asynchronous Architecture**: Fully based on `asyncio` and `httpx`, ensuring high throughput and non-blocking I/O operations.
10
+ - **HTTP Connection Pool**: Manages and reuses TCP connections through a global `httpx.AsyncClient` instance, significantly improving performance under high concurrency.
11
+ - **Concurrency Control**: Built-in global and per-API endpoint concurrency semaphores effectively manage API request rates to prevent exceeding rate limits.
12
+ - **Automatic Retry Mechanism**: Integrated request retry functionality with exponential backoff strategy automatically handles temporary network fluctuations or server errors, enhancing service stability.
13
+ - **Intelligent Country Code Parsing**: Includes a comprehensive country name dictionary supporting inputs in Chinese, English, ISO Alpha-2/3, and other formats, with automatic normalization.
14
+ - **Flexible Environment Variable Configuration**: Supports fine-tuned service configuration via environment variables.
15
+
16
+ ## Available Tools
17
+
18
+ This service provides the following tools:
19
+
20
+ | Tool Name | Description |
21
+ | ------------------------ | -------------------------------------------- |
22
+ | `firecrawl-search` | Performs general Google web / news / images searches. |
23
+ | `firecrawl-scrape` | Scrapes and returns the content of a specified URL. |
24
+
25
+ ## Installation Guide
26
+
27
+ It is recommended to install using `pip` or `uv`.
28
+
29
+ ```bash
30
+ # Using pip
31
+ pip install firecrawl-toolkit
32
+
33
+ # Or using uv
34
+ uv pip install firecrawl-toolkit
35
+ ```
36
+
37
+ ## Quick Start
38
+
39
+ ### Set Environment Variables
40
+
41
+ Create a `.env` file in the project root directory and enter your Firecrawl API key:
42
+
43
+ ```bash
44
+ FIRECRAWL_API_KEY="your-firecrawl-api-key-here"
45
+ ```
46
+
47
+ ### Configure MCP Client
48
+
49
+ Add the following server configuration in the MCP client configuration file:
50
+
51
+ ```json
52
+ {
53
+ "mcpServers": {
54
+ "firecrawl": {
55
+ "command": "python3",
56
+ "args": ["-m", "firecrawl-toolkit"],
57
+ "env": {
58
+ "FIRECRAWL_API_KEY": "<Your Firecrawl API key>"
59
+ }
60
+ }
61
+ }
62
+ }
63
+ ```
64
+
65
+ ```json
66
+ {
67
+ "mcpServers": {
68
+ "firecrawl": {
69
+ "command": "uvx",
70
+ "args": ["firecrawl-toolkit"],
71
+ "env": {
72
+ "FIRECRAWL_API_KEY": "<Your Firecrawl API key>"
73
+ }
74
+ }
75
+ }
76
+ }
77
+ ```
78
+
79
+ ### Environment Variables
80
+
81
+ - `FIRECRAWL_MAX_CONNECTIONS`: Maximum number of HTTP client connections (default: 200).
82
+ - `FIRECRAWL_KEEPALIVE`: Maximum number of keep-alive HTTP client connections (default: 20).
83
+ - `FIRECRAWL_HTTP2`: Enable HTTP/2 (default: "0", set to "1" to enable).
84
+ - `FIRECRAWL_MAX_CONCURRENT_REQUESTS`: Global maximum concurrent requests (default: 200).
85
+ - `FIRECRAWL_RETRY_COUNT`: Maximum retry attempts for failed requests (default: 3).
86
+ - `FIRECRAWL_RETRY_BASE_DELAY`: Base delay time for retries in seconds (default: 0.5).
87
+ - `FIRECRAWL_ENDPOINT_CONCURRENCY`: Set concurrency per endpoint (JSON format), e.g., {"search":10,"scrape":2}.
88
+ - `FIRECRAWL_ENDPOINT_RETRYABLE`: Set retry allowance per endpoint (JSON format), e.g., {"scrape": false}.
89
+
90
+ ## Tool Parameters and Usage Examples
91
+
92
+ ### firecrawl-search: Perform web / news / images search
93
+
94
+ Parameters:
95
+
96
+ - `query` (str, required): Keywords to search.
97
+ - `country` (str, optional): Specify the country/region for search results. Supports Chinese names (e.g., "China"), English names (e.g., "United States"), or ISO codes (e.g., "US"). Default is "US".
98
+ - `search_num` (int, optional): Number of results to return, range 1-100. Default is 10.
99
+ - `search_time` (str, optional): Filter results by time range. Available values: "hour", "day", "week", "month", "year".
100
+
101
+ Example:
102
+
103
+ ```Python
104
+ result_json = firecrawl_general_search(
105
+ query="AI advancements 2024",
106
+ country="United States",
107
+ search_num=5,
108
+ search_time="month"
109
+ )
110
+ ```
111
+
112
+ ### firecrawl-scrape: Scrape webpage content
113
+
114
+ Parameters:
115
+
116
+ - `url` (str, required): URL of the target webpage.
117
+
118
+ Example:
119
+
120
+ ```Python
121
+ result_json = firecrawl_scrape(
122
+ url="https://www.example.com"
123
+ )
124
+ ```
125
+
126
+ ## License Agreement
127
+
128
+ This project is licensed under the MIT License.
@@ -0,0 +1,4 @@
1
+ # firecrawl/__init__.py
2
+ from .server import main
3
+
4
+ __all__ = ["main"]
@@ -0,0 +1,10 @@
1
+ # firecrawl_toolkit/__main__.py
2
+
3
+ from . import server
4
+
5
+ def main():
6
+ """Package entry point."""
7
+ server.main()
8
+
9
+ if __name__ == "__main__":
10
+ main()
@@ -0,0 +1,248 @@
1
+ {
2
+ "AF": ["AF", "Afghanistan", "Islamic Republic of Afghanistan", "AFG", "阿富汗", "阿富汗伊斯兰共和国"],
3
+ "AL": ["AL", "Albania", "Republic of Albania", "ALB", "阿尔巴尼亚"],
4
+ "DZ": ["DZ", "Algeria", "People's Democratic Republic of Algeria", "DZA", "阿尔及利亚"],
5
+ "AS": ["AS", "American Samoa", "AS", "美属萨摩亚"],
6
+ "AD": ["AD", "Andorra", "Principality of Andorra", "AND", "安道尔"],
7
+ "AO": ["AO", "Angola", "Republic of Angola", "AGO", "安哥拉"],
8
+ "AI": ["AI", "Anguilla", "AI", "安圭拉"],
9
+ "AQ": ["AQ", "Antarctica", "AQ", "南极洲"],
10
+ "AG": ["AG", "Antigua and Barbuda", "Antigua & Barbuda", "ATG", "安提瓜和巴布达"],
11
+ "AR": ["AR", "Argentina", "Argentine Republic", "ARG", "阿根廷"],
12
+ "AM": ["AM", "Armenia", "Republic of Armenia", "ARM", "亚美尼亚"],
13
+ "AW": ["AW", "Aruba", "AW", "阿鲁巴"],
14
+ "AU": ["AU", "Australia", "Commonwealth of Australia", "AUS", "澳大利亚", "Australia", "Down Under", "Oz"],
15
+ "AT": ["AT", "Austria", "Republic of Austria", "AUT", "奥地利"],
16
+ "AZ": ["AZ", "Azerbaijan", "Republic of Azerbaijan", "AZE", "阿塞拜疆"],
17
+ "BS": ["BS", "Bahamas", "Commonwealth of The Bahamas", "BHS", "巴哈马", "The Bahamas"],
18
+ "BH": ["BH", "Bahrain", "Kingdom of Bahrain", "BHR", "巴林"],
19
+ "BD": ["BD", "Bangladesh", "People's Republic of Bangladesh", "BGD", "孟加拉国", "孟加拉"],
20
+ "BB": ["BB", "Barbados", "BB", "巴巴多斯"],
21
+ "BY": ["BY", "Belarus", "Republic of Belarus", "BLR", "白俄罗斯"],
22
+ "BE": ["BE", "Belgium", "Kingdom of Belgium", "BEL", "比利时"],
23
+ "BZ": ["BZ", "Belize", "BZE", "伯利兹"],
24
+ "BJ": ["BJ", "Benin", "Republic of Benin", "BEN", "贝宁"],
25
+ "BM": ["BM", "Bermuda", "BM", "百慕大"],
26
+ "BT": ["BT", "Bhutan", "Kingdom of Bhutan", "BTN", "不丹"],
27
+ "BO": ["BO", "Bolivia", "Plurinational State of Bolivia", "BOL", "玻利维亚"],
28
+ "BA": ["BA", "Bosnia and Herzegovina", "BiH", "BA", "波黑", "波斯尼亚和黑塞哥维那"],
29
+ "BW": ["BW", "Botswana", "Republic of Botswana", "BWA", "博茨瓦纳"],
30
+ "BV": ["BV", "Bouvet Island", "Bouvetøya", "BV", "布韦岛"],
31
+ "BR": ["BR", "Brazil", "Federative Republic of Brazil", "BRA", "巴西"],
32
+ "IO": ["IO", "British Indian Ocean Territory", "BIOT", "英属印度洋领地"],
33
+ "BN": ["BN", "Brunei", "Brunei Darussalam", "BRN", "文莱", "文莱达鲁萨兰国"],
34
+ "BG": ["BG", "Bulgaria", "Republic of Bulgaria", "BGR", "保加利亚"],
35
+ "BF": ["BF", "Burkina Faso", "BFA", "布基纳法索"],
36
+ "BI": ["BI", "Burundi", "Republic of Burundi", "BDI", "布隆迪"],
37
+ "KH": ["KH", "Cambodia", "Kingdom of Cambodia", "KHM", "柬埔寨"],
38
+ "CM": ["CM", "Cameroon", "Republic of Cameroon", "CMR", "喀麦隆"],
39
+ "CA": ["CA", "Canada", "CA", "加拿大"],
40
+ "CV": ["CV", "Cape Verde", "Cabo Verde", "CPV", "佛得角", "开普绿洲"],
41
+ "KY": ["KY", "Cayman Islands", "KY", "开曼群岛"],
42
+ "CF": ["CF", "Central African Republic", "CAR", "中非共和国", "中非"],
43
+ "TD": ["TD", "Chad", "TCD", "乍得"],
44
+ "CL": ["CL", "Chile", "Republic of Chile", "CHL", "智利"],
45
+ "CN": ["CN", "China", "People's Republic of China", "PRC", "CHN", "中国", "中华人民共和国", "Mainland China", "大陆"],
46
+ "CX": ["CX", "Christmas Island", "CX", "圣诞岛"],
47
+ "CC": ["CC", "Cocos (Keeling) Islands", "CC", "科科斯(基林)群岛"],
48
+ "CO": ["CO", "Colombia", "Republic of Colombia", "COL", "哥伦比亚"],
49
+ "KM": ["KM", "Comoros", "Union of the Comoros", "COM", "科摩罗"],
50
+ "CG": ["CG", "Congo", "Republic of the Congo", "COG", "刚果(布)", "Congo-Brazzaville"],
51
+ "CD": ["CD", "Congo (Democratic Republic)", "DRC", "COD", "刚果(金)", "Democratic Republic of the Congo"],
52
+ "CK": ["CK", "Cook Islands", "CK", "库克群岛"],
53
+ "CR": ["CR", "Costa Rica", "Republic of Costa Rica", "CRI", "哥斯达黎加"],
54
+ "CI": ["CI", "Ivory Coast", "Côte d'Ivoire", "CIV", "科特迪瓦", "象牙海岸"],
55
+ "HR": ["HR", "Croatia", "Republic of Croatia", "HRV", "克罗地亚"],
56
+ "CU": ["CU", "Cuba", "Republic of Cuba", "CUB", "古巴"],
57
+ "CY": ["CY", "Cyprus", "Republic of Cyprus", "CYP", "塞浦路斯"],
58
+ "CZ": ["CZ", "Czechia", "Czech Republic", "CZE", "捷克", "捷克共和国"],
59
+ "DK": ["DK", "Denmark", "Kingdom of Denmark", "DNK", "丹麦"],
60
+ "DJ": ["DJ", "Djibouti", "Republic of Djibouti", "DJI", "吉布提"],
61
+ "DM": ["DM", "Dominica", "DM", "多米尼克"],
62
+ "DO": ["DO", "Dominican Republic", "DOM", "多米尼加共和国"],
63
+ "EC": ["EC", "Ecuador", "ECU", "厄瓜多尔"],
64
+ "EG": ["EG", "Egypt", "Arab Republic of Egypt", "EGY", "埃及"],
65
+ "SV": ["SV", "El Salvador", "SLV", "萨尔瓦多"],
66
+ "GQ": ["GQ", "Equatorial Guinea", "GNQ", "赤道几内亚"],
67
+ "ER": ["ER", "Eritrea", "ERI", "厄立特里亚"],
68
+ "EE": ["EE", "Estonia", "EST", "爱沙尼亚"],
69
+ "SZ": ["SZ", "Eswatini", "Kingdom of Eswatini", "SWZ", "斯威士兰", "埃斯瓦蒂尼"],
70
+ "ET": ["ET", "Ethiopia", "Federal Democratic Republic of Ethiopia", "ETH", "埃塞俄比亚"],
71
+ "FK": ["FK", "Falkland Islands", "FK", "福克兰群岛", "马尔维纳斯"],
72
+ "FO": ["FO", "Faroe Islands", "FO", "法罗群岛"],
73
+ "FJ": ["FJ", "Fiji", "FJI", "斐济"],
74
+ "FI": ["FI", "Finland", "Republic of Finland", "FIN", "芬兰"],
75
+ "FR": ["FR", "France", "French Republic", "FRA", "法国"],
76
+ "GF": ["GF", "French Guiana", "FG", "法属圭亚那"],
77
+ "PF": ["PF", "French Polynesia", "PF", "法属玻利尼西亚"],
78
+ "TF": ["TF", "French Southern Territories", "TF", "法属南部领地"],
79
+ "GA": ["GA", "Gabon", "Gabonese Republic", "GAB", "加蓬"],
80
+ "GM": ["GM", "Gambia", "The Gambia", "GMB", "冈比亚"],
81
+ "GE": ["GE", "Georgia", "GE", "格鲁吉亚"],
82
+ "DE": ["DE", "Germany", "Federal Republic of Germany", "DEU", "德国", "Deutschland"],
83
+ "GH": ["GH", "Ghana", "GHA", "加纳"],
84
+ "GI": ["GI", "Gibraltar", "GI", "直布罗陀"],
85
+ "GR": ["GR", "Greece", "Hellenic Republic", "GRC", "希腊"],
86
+ "GL": ["GL", "Greenland", "GL", "格陵兰"],
87
+ "GD": ["GD", "Grenada", "GRD", "格林纳达"],
88
+ "GP": ["GP", "Guadeloupe", "GP", "瓜德罗普"],
89
+ "GU": ["GU", "Guam", "GU", "关岛"],
90
+ "GT": ["GT", "Guatemala", "GTM", "危地马拉"],
91
+ "GG": ["GG", "Guernsey", "GG", "根西岛"],
92
+ "GN": ["GN", "Guinea", "GIN", "几内亚"],
93
+ "GW": ["GW", "Guinea-Bissau", "GNB", "几内亚比绍"],
94
+ "GY": ["GY", "Guyana", "GUY", "圭亚那"],
95
+ "HT": ["HT", "Haiti", "HTI", "海地"],
96
+ "HM": ["HM", "Heard Island and McDonald Islands", "HM", "赫德岛和麦克唐纳群岛"],
97
+ "VA": ["VA", "Holy See", "Vatican City", "VAT", "梵蒂冈", "教廷"],
98
+ "HN": ["HN", "Honduras", "HND", "洪都拉斯"],
99
+ "HK": ["HK", "Hong Kong", "Hong Kong SAR", "HK", "香港", "香港特别行政区"],
100
+ "HU": ["HU", "Hungary", "HUN", "匈牙利"],
101
+ "IS": ["IS", "Iceland", "ISL", "冰岛"],
102
+ "IN": ["IN", "India", "Republic of India", "IND", "印度"],
103
+ "ID": ["ID", "Indonesia", "Republic of Indonesia", "IDN", "印尼", "印度尼西亚"],
104
+ "IR": ["IR", "Iran", "Islamic Republic of Iran", "IRN", "伊朗"],
105
+ "IQ": ["IQ", "Iraq", "IRQ", "伊拉克"],
106
+ "IE": ["IE", "Ireland", "Republic of Ireland", "IRL", "爱尔兰"],
107
+ "IM": ["IM", "Isle of Man", "IM", "马恩岛"],
108
+ "IL": ["IL", "Israel", "State of Israel", "ISR", "以色列"],
109
+ "IT": ["IT", "Italy", "Italian Republic", "ITA", "意大利"],
110
+ "JM": ["JM", "Jamaica", "JAM", "牙买加"],
111
+ "JP": ["JP", "Japan", "JPN", "日本", "Nippon"],
112
+ "JE": ["JE", "Jersey", "JE", "泽西岛"],
113
+ "JO": ["JO", "Jordan", "JOR", "约旦"],
114
+ "KZ": ["KZ", "Kazakhstan", "Republic of Kazakhstan", "KAZ", "哈萨克斯坦"],
115
+ "KE": ["KE", "Kenya", "KEN", "肯尼亚"],
116
+ "KI": ["KI", "Kiribati", "KIR", "基里巴斯"],
117
+ "KP": ["KP", "North Korea", "Democratic People's Republic of Korea", "PRK", "朝鲜", "朝鲜民主主义人民共和国"],
118
+ "KR": ["KR", "South Korea", "Republic of Korea", "KOR", "韩国", "大韩民国", "Republic of Korea", "Korea, Republic of"],
119
+ "KW": ["KW", "Kuwait", "KWT", "科威特"],
120
+ "KG": ["KG", "Kyrgyzstan", "Kyrgyz Republic", "KGZ", "吉尔吉斯斯坦", "吉尔吉斯"],
121
+ "LA": ["LA", "Laos", "Lao People's Democratic Republic", "LAO", "老挝", "老挝人民民主共和国"],
122
+ "LV": ["LV", "Latvia", "LVA", "拉脱维亚"],
123
+ "LB": ["LB", "Lebanon", "LBN", "黎巴嫩"],
124
+ "LS": ["LS", "Lesotho", "LSO", "莱索托"],
125
+ "LR": ["LR", "Liberia", "LBR", "利比里亚"],
126
+ "LY": ["LY", "Libya", "Libyan Arab Jamahiriya", "LBY", "利比亚"],
127
+ "LI": ["LI", "Liechtenstein", "LIE", "列支敦士登"],
128
+ "LT": ["LT", "Lithuania", "LTU", "立陶宛"],
129
+ "LU": ["LU", "Luxembourg", "LUX", "卢森堡"],
130
+ "MO": ["MO", "Macau", "Macau SAR", "MO", "澳门", "澳门特别行政区"],
131
+ "MG": ["MG", "Madagascar", "MDG", "马达加斯加"],
132
+ "MW": ["MW", "Malawi", "MWI", "马拉维"],
133
+ "MY": ["MY", "Malaysia", "MYS", "马来西亚"],
134
+ "MV": ["MV", "Maldives", "MDV", "马尔代夫"],
135
+ "ML": ["ML", "Mali", "MLI", "马里"],
136
+ "MT": ["MT", "Malta", "MLT", "马耳他"],
137
+ "MH": ["MH", "Marshall Islands", "MHL", "马绍尔群岛"],
138
+ "MQ": ["MQ", "Martinique", "MQ", "马提尼克"],
139
+ "MR": ["MR", "Mauritania", "MRT", "毛里塔尼亚"],
140
+ "MU": ["MU", "Mauritius", "MUS", "毛里求斯"],
141
+ "YT": ["YT", "Mayotte", "YT", "马约特"],
142
+ "MX": ["MX", "Mexico", "United Mexican States", "MEX", "墨西哥"],
143
+ "FM": ["FM", "Micronesia", "Federated States of Micronesia", "FSM", "密克罗尼西亚"],
144
+ "MD": ["MD", "Moldova", "Republic of Moldova", "MDA", "摩尔多瓦"],
145
+ "MC": ["MC", "Monaco", "Principality of Monaco", "MCO", "摩纳哥"],
146
+ "MN": ["MN", "Mongolia", "MNG", "蒙古", "蒙古国"],
147
+ "ME": ["ME", "Montenegro", "MNE", "黑山"],
148
+ "MS": ["MS", "Montserrat", "MSR", "蒙特塞拉特"],
149
+ "MA": ["MA", "Morocco", "Kingdom of Morocco", "MAR", "摩洛哥"],
150
+ "MZ": ["MZ", "Mozambique", "MOZ", "莫桑比克"],
151
+ "MM": ["MM", "Myanmar", "Burma", "MMR", "缅甸", "缅甸联邦"],
152
+ "NA": ["NA", "Namibia", "NAM", "纳米比亚"],
153
+ "NR": ["NR", "Nauru", "NRU", "瑙鲁"],
154
+ "NP": ["NP", "Nepal", "NPL", "尼泊尔"],
155
+ "NL": ["NL", "Netherlands", "Holland", "NLD", "荷兰", "尼德兰"],
156
+ "NC": ["NC", "New Caledonia", "NC", "新喀里多尼亚"],
157
+ "NZ": ["NZ", "New Zealand", "NZ", "新西兰"],
158
+ "NI": ["NI", "Nicaragua", "NIC", "尼加拉瓜"],
159
+ "NE": ["NE", "Niger", "Niger Republic", "NER", "尼日尔"],
160
+ "NG": ["NG", "Nigeria", "NGA", "尼日利亚"],
161
+ "NU": ["NU", "Niue", "NIU", "纽埃"],
162
+ "NF": ["NF", "Norfolk Island", "NF", "诺福克岛"],
163
+ "MK": ["MK", "North Macedonia", "Republic of North Macedonia", "MKD", "北马其顿", "马其顿"],
164
+ "MP": ["MP", "Northern Mariana Islands", "MP", "北马里亚纳群岛"],
165
+ "NO": ["NO", "Norway", "NOR", "挪威"],
166
+ "OM": ["OM", "Oman", "OMN", "阿曼"],
167
+ "PK": ["PK", "Pakistan", "Islamic Republic of Pakistan", "PAK", "巴基斯坦"],
168
+ "PW": ["PW", "Palau", "PLW", "帕劳"],
169
+ "PS": ["PS", "Palestine", "State of Palestine", "PSE", "巴勒斯坦"],
170
+ "PA": ["PA", "Panama", "PAN", "巴拿马"],
171
+ "PG": ["PG", "Papua New Guinea", "PNG", "巴布亚新几内亚"],
172
+ "PY": ["PY", "Paraguay", "PRY", "巴拉圭"],
173
+ "PE": ["PE", "Peru", "PER", "秘鲁"],
174
+ "PH": ["PH", "Philippines", "PHL", "菲律宾"],
175
+ "PN": ["PN", "Pitcairn", "PN", "皮特凯恩群岛"],
176
+ "PL": ["PL", "Poland", "POL", "波兰"],
177
+ "PT": ["PT", "Portugal", "PRT", "葡萄牙"],
178
+ "PR": ["PR", "Puerto Rico", "PR", "波多黎各"],
179
+ "QA": ["QA", "Qatar", "QAT", "卡塔尔"],
180
+ "RE": ["RE", "Réunion", "REU", "留尼汪"],
181
+ "RO": ["RO", "Romania", "ROU", "罗马尼亚"],
182
+ "RU": ["RU", "Russia", "Russian Federation", "RUS", "俄罗斯", "俄国"],
183
+ "RW": ["RW", "Rwanda", "RWA", "卢旺达"],
184
+ "BL": ["BL", "Saint Barthélemy", "BL", "圣巴泰勒米"],
185
+ "SH": ["SH", "Saint Helena", "Saint Helena, Ascension and Tristan da Cunha", "SH", "圣赫勒拿"],
186
+ "KN": ["KN", "Saint Kitts and Nevis", "KNA", "圣基茨和尼维斯"],
187
+ "LC": ["LC", "Saint Lucia", "LCA", "圣卢西亚"],
188
+ "MF": ["MF", "Saint Martin", "MF", "圣马丁"],
189
+ "PM": ["PM", "Saint Pierre and Miquelon", "PM", "圣皮埃尔和密克隆"],
190
+ "VC": ["VC", "Saint Vincent and the Grenadines", "VCT", "圣文森特和格林纳丁斯"],
191
+ "WS": ["WS", "Samoa", "WSM", "萨摩亚"],
192
+ "SM": ["SM", "San Marino", "SMR", "圣马力诺"],
193
+ "ST": ["ST", "Sao Tome and Principe", "STP", "圣多美和普林西比"],
194
+ "SA": ["SA", "Saudi Arabia", "Kingdom of Saudi Arabia", "SAU", "沙特阿拉伯"],
195
+ "SN": ["SN", "Senegal", "SEN", "塞内加尔"],
196
+ "RS": ["RS", "Serbia", "SRB", "塞尔维亚"],
197
+ "SC": ["SC", "Seychelles", "SYC", "塞舌尔"],
198
+ "SL": ["SL", "Sierra Leone", "SLE", "塞拉利昂"],
199
+ "SG": ["SG", "Singapore", "SGP", "新加坡"],
200
+ "SX": ["SX", "Sint Maarten", "SX", "荷属圣马丁"],
201
+ "SK": ["SK", "Slovakia", "Slovak Republic", "SVK", "斯洛伐克"],
202
+ "SI": ["SI", "Slovenia", "SVN", "斯洛文尼亚"],
203
+ "SB": ["SB", "Solomon Islands", "SLB", "所罗门群岛"],
204
+ "SO": ["SO", "Somalia", "SOM", "索马里"],
205
+ "ZA": ["ZA", "South Africa", "Republic of South Africa", "ZAF", "南非"],
206
+ "GS": ["GS", "South Georgia and the South Sandwich Islands", "GS", "南乔治亚和南桑威奇群岛"],
207
+ "SS": ["SS", "South Sudan", "SSD", "南苏丹"],
208
+ "ES": ["ES", "Spain", "Kingdom of Spain", "ESP", "西班牙"],
209
+ "LK": ["LK", "Sri Lanka", "LKA", "斯里兰卡"],
210
+ "SD": ["SD", "Sudan", "SDN", "苏丹"],
211
+ "SR": ["SR", "Suriname", "SUR", "苏里南"],
212
+ "SJ": ["SJ", "Svalbard and Jan Mayen", "SJ", "斯瓦尔巴和扬马延"],
213
+ "SE": ["SE", "Sweden", "SWE", "瑞典"],
214
+ "CH": ["CH", "Switzerland", "Swiss Confederation", "CHE", "瑞士", "Swiss"],
215
+ "SY": ["SY", "Syria", "Syrian Arab Republic", "SYR", "叙利亚"],
216
+ "TW": ["TW", "Taiwan", "Taiwan, Province of China", "TWN", "台湾", "中华民国", "ROC"],
217
+ "TJ": ["TJ", "Tajikistan", "TJK", "塔吉克斯坦"],
218
+ "TZ": ["TZ", "Tanzania", "United Republic of Tanzania", "TZA", "坦桑尼亚"],
219
+ "TH": ["TH", "Thailand", "THA", "泰国"],
220
+ "TL": ["TL", "Timor-Leste", "East Timor", "TLS", "东帝汶", "蒂莫尔"],
221
+ "TG": ["TG", "Togo", "TGO", "多哥"],
222
+ "TK": ["TK", "Tokelau", "TKL", "托克劳"],
223
+ "TO": ["TO", "Tonga", "TON", "汤加"],
224
+ "TT": ["TT", "Trinidad and Tobago", "TTO", "特立尼达和多巴哥"],
225
+ "TN": ["TN", "Tunisia", "TUN", "突尼斯"],
226
+ "TR": ["TR", "Turkey", "Republic of Turkey", "TUR", "土耳其"],
227
+ "TM": ["TM", "Turkmenistan", "TKM", "土库曼斯坦"],
228
+ "TC": ["TC", "Turks and Caicos Islands", "TCA", "特克斯和凯科斯群岛"],
229
+ "TV": ["TV", "Tuvalu", "TUV", "图瓦卢"],
230
+ "UG": ["UG", "Uganda", "UGA", "乌干达"],
231
+ "UA": ["UA", "Ukraine", "UKR", "乌克兰"],
232
+ "AE": ["AE", "United Arab Emirates", "UAE", "阿拉伯联合酋长国", "阿联酋"],
233
+ "GB": ["GB", "United Kingdom", "United Kingdom of Great Britain and Northern Ireland", "UK", "GBR", "英国", "Britain", "Great Britain", "England", "UK"],
234
+ "US": ["US", "United States", "United States of America", "USA", "US", "America", "美利坚合众国", "美国"],
235
+ "UM": ["UM", "United States Minor Outlying Islands", "UM", "美国本土外小岛屿"],
236
+ "UY": ["UY", "Uruguay", "URY", "乌拉圭"],
237
+ "UZ": ["UZ", "Uzbekistan", "UZB", "乌兹别克斯坦"],
238
+ "VU": ["VU", "Vanuatu", "VUT", "瓦努阿图"],
239
+ "VE": ["VE", "Venezuela", "Bolivarian Republic of Venezuela", "VEN", "委内瑞拉"],
240
+ "VN": ["VN", "Vietnam", "Socialist Republic of Vietnam", "VNM", "越南"],
241
+ "VG": ["VG", "British Virgin Islands", "VG", "英属维尔京群岛"],
242
+ "VI": ["VI", "United States Virgin Islands", "VI", "美属维尔京群岛"],
243
+ "WF": ["WF", "Wallis and Futuna", "WF", "瓦利斯和富图纳"],
244
+ "EH": ["EH", "Western Sahara", "ESH", "西撒哈拉"],
245
+ "YE": ["YE", "Yemen", "YEM", "也门"],
246
+ "ZM": ["ZM", "Zambia", "ZMB", "赞比亚"],
247
+ "ZW": ["ZW", "Zimbabwe", "ZWE", "津巴布韦"]
248
+ }