Skip to content

Commit 159de2b

Browse files
authored
Merge pull request #133 from defog-ai/directory-guidelines
Follow the plugin directory checklist for bundled files and the README
2 parents 404a4cd + f3eccc4 commit 159de2b

20 files changed

Lines changed: 7096 additions & 67 deletions

‎.claude-plugin/marketplace.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
{
1010
"name": "factiq",
1111
"source": "./",
12-
"description": "Answer economic and financial data questions with real data from FactIQ — official statistics, market data, earnings-call transcripts, executive media appearances, central-bank speeches and minutes, and a curated business-news feed — return sourced answers, chart JSON, or report JSON."
12+
"description": "Answer economic and financial data questions with real data from FactIQ — official statistics, market data, earnings-call transcripts, executive media appearances, central-bank speeches and minutes, a curated business-news feed, and satellite-derived data (nighttime lights, shipping and port activity, reservoir levels, crop fires and wildfires with mappable footprints, NO2/SO2/CO activity, smoke and dust aerosol, monsoon rainfall) — return sourced answers, chart JSON, or report JSON."
1313
}
1414
]
1515
}

‎.claude-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "factiq",
33
"description": "Answer economic and financial data questions with real data from FactIQ — official statistics, market data, earnings-call transcripts, executive media appearances, central-bank speeches and minutes, a curated business-news feed, and satellite-derived data (nighttime lights, shipping and port activity, reservoir levels, crop fires and wildfires with mappable footprints, NO2/SO2/CO activity, smoke and dust aerosol, monsoon rainfall) — return sourced answers, chart JSON, or report JSON.",
4-
"version": "0.42.0",
4+
"version": "0.43.0",
55
"author": {
66
"name": "FactIQ",
77
"url": "https://www.factiq.com"

‎.codex-plugin/plugin.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "factiq",
33
"description": "Answer economic and financial data questions with real FactIQ data — official data, markets, earnings calls, executive media appearances, central-bank documents, and satellite-derived signals including crop fires and wildfires — then return sourced answers, chart JSON, or report JSON.",
4-
"version": "0.42.0",
4+
"version": "0.43.0",
55
"author": {
66
"name": "FactIQ",
77
"url": "https://www.factiq.com"

‎README.md‎

Lines changed: 26 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -162,44 +162,32 @@ Then authorize with `/mcp`.
162162
### Without a browser: scripts, CI, and headless agents
163163

164164
Every FactIQ tool also works with a personal API key instead of the browser
165-
sign-in. Create the key at [factiq.com/settings/security](https://www.factiq.com/settings/security)
166-
and send it as a bearer token. The full reference, with a REST endpoint table
167-
and Python examples, is at
168-
[factiq.com/docs/api](https://www.factiq.com/docs/api).
169-
170-
Call a REST endpoint:
171-
172-
```bash
173-
curl https://api.factiq.com/tools/context \
174-
-H "Authorization: Bearer $FACTIQ_API_KEY"
175-
```
176-
177-
Call an MCP tool over plain HTTP (one JSON-RPC POST, no session handshake):
178-
179-
```bash
180-
curl https://api.factiq.com/mcp \
181-
-H "Authorization: Bearer $FACTIQ_API_KEY" \
182-
-H "Content-Type: application/json" \
183-
-H "Accept: application/json, text/event-stream" \
184-
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
185-
"params":{"name":"get_data_catalog","arguments":{}}}'
186-
```
187-
188-
Register the MCP server with the key so a headless coding agent never opens a
189-
browser:
190-
191-
```bash
192-
# Claude Code
193-
claude mcp add factiq https://api.factiq.com/mcp --transport http \
194-
--header "Authorization: Bearer $FACTIQ_API_KEY"
195-
196-
# Codex (reads the key from the environment variable at start-up)
197-
codex mcp add factiq --url https://api.factiq.com/mcp \
198-
--bearer-token-env-var FACTIQ_API_KEY
199-
```
200-
201-
Keep the key out of source control. Regenerating it on the settings page
202-
revokes the old one immediately.
165+
sign-in. Create the key at [factiq.com/settings/security](https://www.factiq.com/settings/security).
166+
The guide at [factiq.com/docs/api](https://www.factiq.com/docs/api) shows how
167+
to call the REST endpoints and the MCP server with the key, and how to register
168+
the server in Claude Code or Codex without a browser. Keep the key out of
169+
source control. Regenerating it on the settings page revokes the old one
170+
immediately.
171+
172+
## What the plugin sends and runs
173+
174+
- **One remote MCP server.** The plugin adds `https://api.factiq.com/mcp`
175+
(see `.mcp.json`), which you sign in to with OAuth. Each tool call sends its
176+
arguments (search terms, SQL statements, series IDs, tickers, regions) to
177+
that server and returns FactIQ data. FactIQ records connector tool inputs
178+
and outputs for reliability and support, as described in the
179+
[privacy policy](https://www.factiq.com/privacy).
180+
- **One tool that sends a message.** `send_feedback` sends a short report,
181+
written by the agent, to the FactIQ team when a FactIQ result looks wrong.
182+
It changes no data. Every other tool only reads data.
183+
- **Local scripts with no network access.** The skill can run the Python
184+
scripts in `scripts/` (`hs_codes.py`, `trade_sql.py`, `comext_sql.py`,
185+
`series_math.py`). They read only their arguments, files you pass them, and
186+
the bundled files in `scripts/data/`, and they print their result. They make
187+
no network calls.
188+
- **Local outputs only.** Charts and reports are files written in your own
189+
workspace. The plugin does not publish them anywhere.
190+
- The plugin has no hooks and runs nothing when it is installed.
203191

204192
## Try it
205193

‎SETUP.md‎

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,9 @@ installed yet, the user can open
4646

4747
When no browser is available, the user registers the MCP server with an API
4848
key instead of signing in. Point them to
49-
[factiq.com/docs/api](https://www.factiq.com/docs/api) for the full guide. The
50-
short form:
51-
52-
```bash
53-
# Claude Code
54-
claude mcp add factiq https://api.factiq.com/mcp --transport http \
55-
--header "Authorization: Bearer $FACTIQ_API_KEY"
56-
57-
# Codex
58-
codex mcp add factiq --url https://api.factiq.com/mcp \
59-
--bearer-token-env-var FACTIQ_API_KEY
60-
```
61-
62-
The key must come from the user's own environment. Do not read it from a file,
49+
[factiq.com/docs/api](https://www.factiq.com/docs/api), which has the
50+
commands for Claude Code and Codex. The user creates the key and sets it up
51+
themselves. Do not read a key from the user's environment or from a file,
6352
print it, or write it into a commit.
6453

6554
## Verify the connection

‎scripts/data/hs_names.json.gz‎

-152 KB
Binary file not shown.

‎scripts/data/hs_names/hs2.json‎

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
{
2+
"2": {
3+
"01": "Animals; live",
4+
"02": "Meat and edible meat offal",
5+
"03": "Fish and crustaceans, molluscs and other aquatic invertebrates",
6+
"04": "Dairy produce; birds' eggs; natural honey; edible products of animal origin, not elsewhere specified or included",
7+
"05": "Animal originated products; not elsewhere specified or included",
8+
"06": "Trees and other plants, live; bulbs, roots and the like; cut flowers and ornamental foliage",
9+
"07": "Vegetables and certain roots and tubers; edible",
10+
"08": "Fruit and nuts, edible; peel of citrus fruit or melons",
11+
"09": "Coffee, tea, mate and spices",
12+
"10": "Cereals",
13+
"11": "Products of the milling industry; malt, starches, inulin, wheat gluten",
14+
"12": "Oil seeds and oleaginous fruits; miscellaneous grains, seeds and fruit, industrial or medicinal plants; straw and fodder",
15+
"13": "Lac; gums, resins and other vegetable saps and extracts",
16+
"14": "Vegetable plaiting materials; vegetable products not elsewhere specified or included",
17+
"15": "Animal, vegetable or microbial fats and oils and their cleavage products; prepared edible fats; animal or vegetable waxes",
18+
"16": "Meat, fish, crustaceans, molluscs or other aquatic invertebrates, or insects; preparations thereof",
19+
"17": "Sugars and sugar confectionery",
20+
"18": "Cocoa and cocoa preparations",
21+
"19": "Preparations of cereals, flour, starch or milk; pastrycooks' products",
22+
"20": "Preparations of vegetables, fruit, nuts or other parts of plants",
23+
"21": "Miscellaneous edible preparations",
24+
"22": "Beverages, spirits and vinegar",
25+
"23": "Food industries, residues and wastes thereof; prepared animal fodder",
26+
"24": "Tobacco and manufactured tobacco substitutes; products, whether or not containing nicotine, intended for inhalation without combustion; other nicotine containing products intended for the intake of nicotine into the human body",
27+
"25": "Salt; sulphur; earths, stone; plastering materials, lime and cement",
28+
"26": "Ores, slag and ash",
29+
"27": "Mineral fuels, mineral oils and products of their distillation; bituminous substances; mineral waxes",
30+
"28": "Inorganic chemicals; organic and inorganic compounds of precious metals; of rare earth metals, of radio-active elements and of isotopes",
31+
"29": "Organic chemicals",
32+
"30": "Pharmaceutical products",
33+
"31": "Fertilizers",
34+
"32": "Tanning or dyeing extracts; tannins and their derivatives; dyes, pigments and other colouring matter; paints, varnishes; putty, other mastics; inks",
35+
"33": "Essential oils and resinoids; perfumery, cosmetic or toilet preparations",
36+
"34": "Soap, organic surface-active agents; washing, lubricating, polishing or scouring preparations; artificial or prepared waxes, candles and similar articles, modelling pastes, dental waxes and dental preparations with a basis of plaster",
37+
"35": "Albuminoidal substances; modified starches; glues; enzymes",
38+
"36": "Explosives; pyrotechnic products; matches; pyrophoric alloys; certain combustible preparations",
39+
"37": "Photographic or cinematographic goods",
40+
"38": "Chemical products n.e.c.",
41+
"39": "Plastics and articles thereof",
42+
"40": "Rubber and articles thereof",
43+
"41": "Raw hides and skins (other than furskins) and leather",
44+
"42": "Articles of leather; saddlery and harness; travel goods, handbags and similar containers; articles of animal gut (other than silk-worm gut)",
45+
"43": "Furskins and artificial fur; manufactures thereof",
46+
"44": "Wood and articles of wood; wood charcoal",
47+
"45": "Cork and articles of cork",
48+
"46": "Manufactures of straw, esparto or other plaiting materials; basketware and wickerwork",
49+
"47": "Pulp of wood or other fibrous cellulosic material; recovered (waste and scrap) paper or paperboard",
50+
"48": "Paper and paperboard; articles of paper pulp, of paper or paperboard",
51+
"49": "Printed books, newspapers, pictures and other products of the printing industry; manuscripts, typescripts and plans",
52+
"50": "Silk",
53+
"51": "Wool, fine or coarse animal hair; horsehair yarn and woven fabric",
54+
"52": "Cotton",
55+
"53": "Vegetable textile fibres; paper yarn and woven fabrics of paper yarn",
56+
"54": "Man-made filaments; strip and the like of man-made textile materials",
57+
"55": "Man-made staple fibres",
58+
"56": "Wadding, felt and nonwovens, special yarns; twine, cordage, ropes and cables and articles thereof",
59+
"57": "Carpets and other textile floor coverings",
60+
"58": "Fabrics; special woven fabrics, tufted textile fabrics, lace, tapestries, trimmings, embroidery",
61+
"59": "Textile fabrics; impregnated, coated, covered or laminated; textile articles of a kind suitable for industrial use",
62+
"60": "Fabrics; knitted or crocheted",
63+
"61": "Apparel and clothing accessories; knitted or crocheted",
64+
"62": "Apparel and clothing accessories; not knitted or crocheted",
65+
"63": "Textiles, made up articles; sets; worn clothing and worn textile articles; rags",
66+
"64": "Footwear; gaiters and the like; parts of such articles",
67+
"65": "Headgear and parts thereof",
68+
"66": "Umbrellas, sun umbrellas, walking-sticks, seat sticks, whips, riding crops; and parts thereof",
69+
"67": "Feathers and down, prepared; and articles made of feather or of down; artificial flowers; articles of human hair",
70+
"68": "Stone, plaster, cement, asbestos, mica or similar materials; articles thereof",
71+
"69": "Ceramic products",
72+
"70": "Glass and glassware",
73+
"71": "Natural, cultured pearls; precious, semi-precious stones; precious metals, metals clad with precious metal, and articles thereof; imitation jewellery; coin",
74+
"72": "Iron and steel",
75+
"73": "Iron or steel articles",
76+
"74": "Copper and articles thereof",
77+
"75": "Nickel and articles thereof",
78+
"76": "Aluminium and articles thereof",
79+
"78": "Lead and articles thereof",
80+
"79": "Zinc and articles thereof",
81+
"80": "Tin; articles thereof",
82+
"81": "Metals; n.e.c., cermets and articles thereof",
83+
"82": "Tools, implements, cutlery, spoons and forks, of base metal; parts thereof, of base metal",
84+
"83": "Metal; miscellaneous products of base metal",
85+
"84": "Machinery and mechanical appliances, boilers, nuclear reactors; parts thereof",
86+
"85": "Electrical machinery and equipment and parts thereof; sound recorders and reproducers; television image and sound recorders and reproducers, parts and accessories of such articles",
87+
"86": "Railway, tramway locomotives, rolling-stock and parts thereof; railway or tramway track fixtures and fittings and parts thereof; mechanical (including electro-mechanical) traffic signalling equipment of all kinds",
88+
"87": "Vehicles; other than railway or tramway rolling stock, and parts and accessories thereof",
89+
"88": "Aircraft, spacecraft, and parts thereof",
90+
"89": "Ships, boats and floating structures",
91+
"90": "Optical, photographic, cinematographic, measuring, checking, medical or surgical instruments and apparatus; parts and accessories",
92+
"91": "Clocks and watches and parts thereof",
93+
"92": "Musical instruments; parts and accessories of such articles",
94+
"93": "Arms and ammunition; parts and accessories thereof",
95+
"94": "Furniture; bedding, mattresses, mattress supports, cushions and similar stuffed furnishings; lamps and lighting fittings, n.e.c.; illuminated signs, illuminated name-plates and the like; prefabricated buildings",
96+
"95": "Toys, games and sports requisites; parts and accessories thereof",
97+
"96": "Miscellaneous manufactured articles",
98+
"97": "Works of art; collectors' pieces and antiques",
99+
"99": "Commodities not specified according to kind"
100+
}
101+
}

0 commit comments

Comments
 (0)