|
| 1 | +# Fibery MCP Server |
| 2 | + |
| 3 | +Interact with your Fibery workspace. |
| 4 | + |
| 5 | +[What is an MCP Server?](https://www.anthropic.com/news/model-context-protocol) |
| 6 | + |
| 7 | +## Characteristics |
| 8 | +Attribute|Details| |
| 9 | +|-|-| |
| 10 | +**Image Source**|Official Image |
| 11 | +**Docker Image**|[mcp/fibery](https://hub.docker.com/repository/docker/mcp/fibery) |
| 12 | +**Author**|[Fibery-inc](https://github.com/Fibery-inc) |
| 13 | +**Repository**|https://github.com/Fibery-inc/fibery-mcp-server |
| 14 | +**Dockerfile**|https://github.com/Fibery-inc/fibery-mcp-server/blob/main/Dockerfile |
| 15 | +**Docker Image built by**|Docker Inc. |
| 16 | +**Docker Scout Health Score**|  |
| 17 | +**Licence**|MIT License |
| 18 | + |
| 19 | +## Available Tools |
| 20 | +Tools provided by this Server|Short Description |
| 21 | +-|- |
| 22 | +`create_entities_batch`|Create multiple Fibery entities at once with specified fields.| |
| 23 | +`create_entity`|Create Fibery entity with specified fields.| |
| 24 | +`current_date`|Get today's date in ISO 8601 format (YYYY-mm-dd.HH:MM:SS.000Z)| |
| 25 | +`describe_database`|Get list of all fields (in format of 'Title [name]: type') in the selected Fibery database and for all related databases.| |
| 26 | +`list_databases`|Get list of all databases (their names) in user's Fibery workspace (schema)| |
| 27 | +`query_database`|Run any Fibery API command.| |
| 28 | +`update_entity`|Update Fibery entity with specified fields.| |
| 29 | + |
| 30 | +--- |
| 31 | +## Tools Details |
| 32 | + |
| 33 | +#### Tool: **`create_entities_batch`** |
| 34 | +Create multiple Fibery entities at once with specified fields. |
| 35 | +Examples (note, that these databases are non-existent, use databases only from user's schema!): |
| 36 | +Query: Create some features |
| 37 | +Tool use: |
| 38 | +{ |
| 39 | + "database": "Product Management/Feature", |
| 40 | + "entities": [ |
| 41 | + { |
| 42 | + "Product Management/Name": "New Feature 1", |
| 43 | + "Product Management/Description": "Description of the new feature 1", |
| 44 | + "workflow/state": "To Do" # notice how we use string literal for workflow field here |
| 45 | + }, |
| 46 | + { |
| 47 | + "Product Management/Name": "New Feature 2", |
| 48 | + "Product Management/Description": "Description of the new feature 2", |
| 49 | + "workflow/state": "In Progress" # notice how we use string literal for workflow field here |
| 50 | + } |
| 51 | + ] |
| 52 | +} |
| 53 | +In case of successful execution, you will get links to created entities. Make sure to give the links to the user. |
| 54 | +Parameters|Type|Description |
| 55 | +-|-|- |
| 56 | +`database`|`string`|Fibery Database where entities will be created. |
| 57 | +`entities`|`object`|List of dictionaries that define what fields to set in format [{"FieldName": value}] (i.e. [{"Product Management/Name": "My new entity"}]). |
| 58 | + |
| 59 | +--- |
| 60 | +#### Tool: **`create_entity`** |
| 61 | +Create Fibery entity with specified fields. |
| 62 | +Examples (note, that these databases are non-existent, use databases only from user's schema!): |
| 63 | +Query: Create a feature |
| 64 | +Tool use: |
| 65 | +{ |
| 66 | + "database": "Product Management/Feature", |
| 67 | + "entity": { |
| 68 | + "Product Management/Name": "New Feature", |
| 69 | + "Product Management/Description": "Description of the new feature", |
| 70 | + "workflow/state": "To Do" # notice how we use string literal for workflow field here |
| 71 | + } |
| 72 | +} |
| 73 | +In case of successful execution, you will get a link to created entity. Make sure to give that link to the user. |
| 74 | +Parameters|Type|Description |
| 75 | +-|-|- |
| 76 | +`database`|`string`|Fibery Database where to create an entity. |
| 77 | +`entity`|`object`|Dictionary that defines what fields to set in format {"FieldName": value} (i.e. {"Product Management/Name": "My new entity"}). |
| 78 | + |
| 79 | +--- |
| 80 | +#### Tool: **`current_date`** |
| 81 | +Get today's date in ISO 8601 format (YYYY-mm-dd.HH:MM:SS.000Z) |
| 82 | +#### Tool: **`describe_database`** |
| 83 | +Get list of all fields (in format of 'Title [name]: type') in the selected Fibery database and for all related databases. |
| 84 | +Parameters|Type|Description |
| 85 | +-|-|- |
| 86 | +`database_name`|`string`|Database name as defined in Fibery schema |
| 87 | + |
| 88 | +--- |
| 89 | +#### Tool: **`list_databases`** |
| 90 | +Get list of all databases (their names) in user's Fibery workspace (schema) |
| 91 | +#### Tool: **`query_database`** |
| 92 | +Run any Fibery API command. This gives tremendous flexibility, but requires a bit of experience with the low-level Fibery API. In case query succeeded, return value contains a list of records with fields you specified in select. If request failed, will return detailed error message. |
| 93 | +Examples (note, that these databases are non-existent, use databases only from user's schema!): |
| 94 | +Query: What newly created Features do we have for the past 2 months? |
| 95 | +Tool use: |
| 96 | +{ |
| 97 | + "q_from": "Dev/Feature", |
| 98 | + "q_select": { |
| 99 | + "Name": ["Dev/Name"], |
| 100 | + "Public Id": ["fibery/public-id"], |
| 101 | + "Creation Date": ["fibery/creation-date"] |
| 102 | + }, |
| 103 | + "q_where": [">", ["fibery/creation-date"], "$twoMonthsAgo"], |
| 104 | + "q_order_by": {"fibery/creation-date": "q/desc"}, |
| 105 | + "q_limit": 100, |
| 106 | + "q_offset": 0, |
| 107 | + "q_params": { |
| 108 | + $twoMonthsAgo: "2025-01-16T00:00:00.000Z" |
| 109 | + } |
| 110 | +} |
| 111 | + |
| 112 | +Query: What Admin Tasks for the past week are Approval or Done? |
| 113 | +Tool use: |
| 114 | +{ |
| 115 | + "q_from": "Administrative/Admin Task", |
| 116 | + "q_select": { |
| 117 | + "Name": ["Administrative/Name"], |
| 118 | + "Public Id": ["fibery/public-id"], |
| 119 | + "Creation Date": ["fibery/creation-date"], |
| 120 | + "State": ["workflow/state", "enum/name"] |
| 121 | + }, |
| 122 | + "q_where": [ |
| 123 | + "q/and", # satisfy time AND states condition |
| 124 | + [">", ["fibery/creation-date"], "$oneWeekAgo"], |
| 125 | + [ |
| 126 | + "q/or", # nested or, since entity can be in either of these states |
| 127 | + ["=", ["workflow/state", "enum/name"], "$state1"], |
| 128 | + ["=", ["workflow/state", "enum/name"], "$state2"] |
| 129 | + ] |
| 130 | + ], |
| 131 | + "q_order_by": {"fibery/creation-date": "q/desc"}, |
| 132 | + "q_limit": 100, |
| 133 | + "q_offset": 0, |
| 134 | + "q_params": { # notice that parameters used in "where" are always passed in params! |
| 135 | + $oneWeekAgo: "2025-03-07T00:00:00.000Z", |
| 136 | + $state1: "Approval", |
| 137 | + $state2: "Done" |
| 138 | + } |
| 139 | +} |
| 140 | + |
| 141 | +Query: What Admin Tasks for the past week are Approval or Done? |
| 142 | +Tool use: |
| 143 | +{ |
| 144 | + "q_from": "Administrative/Admin Task", |
| 145 | + "q_select": { |
| 146 | + "State": ["workflow/state", "enum/name"], |
| 147 | + "Public Id": ["fibery/public-id"], |
| 148 | + "Creation Date": ["fibery/creation-date"], |
| 149 | + "Modification Date": ["fibery/modification-date"], |
| 150 | + "Deadline": ["Administrative/Deadline"], |
| 151 | + "Group": ["Administrative/Group", "Administrative/name"], |
| 152 | + "Name": ["Administrative/Name"], |
| 153 | + "Priority": ["Administrative/Priority_Administrative/Admin Task", "enum/name"] |
| 154 | + }, |
| 155 | + "q_where": ["!=", ["workflow/state", "workflow/Final"], "$stateType"], # Administrative/Admin Task is not "Finished" yet |
| 156 | + "q_order_by": {"fibery/creation-date": "q/desc"}, |
| 157 | + "q_limit": 100, |
| 158 | + "q_offset": 0, |
| 159 | + "q_params: { |
| 160 | + "$stateType": true |
| 161 | + } |
| 162 | +} |
| 163 | + |
| 164 | +Query: Summarize acc contacts with public id 1. |
| 165 | +Tool use: |
| 166 | +{ |
| 167 | + "q_from": "Accounting/Acc Contacts", |
| 168 | + "q_select": { |
| 169 | + "Name": ["Accounting/Name"], |
| 170 | + "Public Id": ["fibery/public-id"], |
| 171 | + "Creation Date": ["fibery/creation-date"], |
| 172 | + "Description": ["Accounting/Description"] |
| 173 | + }, |
| 174 | + "q_where": ["=", ["fibery/public-id"], "$publicId"], |
| 175 | + "q_limit": 1, |
| 176 | + "q_params": { |
| 177 | + $publicId: "1", |
| 178 | + } |
| 179 | +} |
| 180 | +Parameters|Type|Description |
| 181 | +-|-|- |
| 182 | +`q_from`|`string`|Specifies the entity type in "Space/Type" format (e.g., "Product Management/feature", "Product Management/Insight") |
| 183 | +`q_select`|`object`|Defines what fields to retrieve. Can include: |
| 184 | + - Primitive fields using format {"AliasName": "FieldName"} (i.e. {"Name": "Product Management/Name"}) |
| 185 | + - Related entity fields using format {"AliasName": ["Related entity", "related entity field"]} (i.e. {"Secret": ["Product Management/Description", "Collaboration~Documents/secret"]}). Careful, does not work with 1-* connection! |
| 186 | +To work with 1-* relationships, you can use sub-querying: {"AliasName": {"q/from": "Related type", "q/select": {"AliasName 2": "fibery/id"}, "q/limit": 50}} |
| 187 | +AliasName can be of any arbitrary value. |
| 188 | +`q_limit`|`integer` *optional*|Number of results per page (defaults to 50). Maximum allowed value is 1000 |
| 189 | +`q_offset`|`integer` *optional*|Number of results to skip. Mainly used in combination with limit and orderBy for pagination. |
| 190 | +`q_order_by`|`object` *optional*|List of sorting criteria in format {"field1": "q/asc", "field2": "q/desc"} |
| 191 | +`q_params`|`object` *optional*|Dictionary of parameter values referenced in where using "$param" syntax. For example, {$fromDate: "2025-01-01"} |
| 192 | +`q_where`|`object` *optional*|Filter conditions in format [operator, [field_path], value] or ["q/and"|"q/or", ...conditions]. Common usages: |
| 193 | +- Simple comparison: ["=", ["field", "path"], "$param"]. You cannot pass value of $param directly in where clause. Use params object instead. Pay really close attention to it as it is not common practice, but that's how it works in our case! |
| 194 | +- Logical combinations: ["q/and", ["<", ["field1"], "$param1"], ["=", ["field2"], "$param2"]] |
| 195 | +- Available operators: =, !=, <, <=, >, >=, q/contains, q/not-contains, q/in, q/not-in |
| 196 | + |
| 197 | +--- |
| 198 | +#### Tool: **`update_entity`** |
| 199 | +Update Fibery entity with specified fields. |
| 200 | +Examples (note, that these databases are non-existent, use databases only from user's schema!): |
| 201 | +Query: Update a feature we talked about |
| 202 | +Tool use: |
| 203 | +{ |
| 204 | + "database": "Product Management/Feature", |
| 205 | + "entity": { |
| 206 | + "fibery/id": "12345678-1234-5678-1234-567812345678", |
| 207 | + "Product Management/Name": "New Feature 2", |
| 208 | + "Product Management/Description": {"append": true, "content": "Notes: some notes"}, |
| 209 | + "workflow/state": "In Progress" |
| 210 | + } |
| 211 | +} |
| 212 | +In case of successful execution, you will get a link to updated entity. Make sure to give that link to the user. |
| 213 | +Parameters|Type|Description |
| 214 | +-|-|- |
| 215 | +`database`|`string`|Fibery Database where to update an entity. |
| 216 | +`entity`|`object`|Dictionary that defines what fields to set in format {"FieldName": value} (i.e. {"Product Management/Name": "My new entity"}). |
| 217 | +Exception are document fields. For them you must specify append (boolean, whether to append to current content) and content itself: {"Product Management/Description": {"append": true, "content": "Additional info"}} |
| 218 | + |
| 219 | +--- |
| 220 | +## Use this MCP Server |
| 221 | + |
| 222 | +```json |
| 223 | +{ |
| 224 | + "mcpServers": { |
| 225 | + "fibery": { |
| 226 | + "command": "docker", |
| 227 | + "args": [ |
| 228 | + "run", |
| 229 | + "-i", |
| 230 | + "--rm", |
| 231 | + "-e", |
| 232 | + "FIBERY_HOST", |
| 233 | + "-e", |
| 234 | + "FIBERY_API_TOKEN", |
| 235 | + "mcp/fibery" |
| 236 | + ], |
| 237 | + "env": { |
| 238 | + "FIBERY_HOST": "your-domain.fibery.io", |
| 239 | + "FIBERY_API_TOKEN": "your-api-token" |
| 240 | + } |
| 241 | + } |
| 242 | + } |
| 243 | +} |
| 244 | +``` |
| 245 | + |
| 246 | +[Why is it safer to run MCP Servers with Docker?](https://www.docker.com/blog/the-model-context-protocol-simplifying-building-ai-apps-with-anthropic-claude-desktop-and-docker/) |
0 commit comments