feat: add API key auth flow for Klavis MCP servers (#343)
* feat: update to support more klavis MCP servers * fix: minor icon fix * fix: normalize klavis mcp auth flow compatibility * feat: add API key auth flow for Klavis MCP servers Servers that use API key authentication (Stripe, Cloudflare, Brave Search, Exa, Mem0, Resend, Mixpanel, PostHog, Postman, Zendesk, Intercom) were failing with "Failed to add app" because the frontend only handled OAuth flows. This adds the complete API key auth path: - Backend: apiKeyUrls in StrataCreateResponse, submitApiKey() method, /servers/submit-api-key route - Frontend: ApiKeyDialog component, useSubmitApiKey hook, ConnectMCP updated to show dialog for API-key servers instead of opening OAuth Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: remove broken success check in Klavis submitApiKey The Klavis /mcp-server/instance/set-auth endpoint returns { message: "Authentication updated successfully." } without a success field. Our code checked `data.success` which was always undefined, causing API key auth to fail even when Klavis accepted the key. The request() method already throws on non-2xx responses, so the explicit check was redundant and incorrect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
6
apps/agent/assets/mcp-icons/asana.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"
|
||||
viewBox="781.361 0 944.893 873.377">
|
||||
<path fill="rgb(241,110,111)"
|
||||
d="M1520.766 462.371c-113.508 0-205.508 92-205.508 205.488 0 113.499 92 205.518 205.508 205.518 113.489 0 205.488-92.019 205.488-205.518 0-113.488-91.999-205.488-205.488-205.488zm-533.907.01c-113.489.01-205.498 91.99-205.498 205.488 0 113.489 92.009 205.498 205.498 205.498 113.498 0 205.508-92.009 205.508-205.498 0-113.499-92.01-205.488-205.518-205.488h.01zm472.447-256.883c0 113.489-91.999 205.518-205.488 205.518-113.508 0-205.508-92.029-205.508-205.518S1140.31 0 1253.817 0c113.489 0 205.479 92.009 205.479 205.498h.01z" />
|
||||
<script xmlns="" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 706 B |
10
apps/agent/assets/mcp-icons/box.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="200" height="200" fill="url(#paint0_linear_2583_2763)"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M101.301 115.156C93.672 115.156 87.1331 108.617 87.1331 100.625C87.1331 92.6328 93.3087 86.0939 101.301 86.0939C108.929 86.0939 115.468 92.6328 115.468 100.625C115.468 108.617 109.293 115.156 101.301 115.156ZM59.8878 115.156C52.2591 115.156 45.7202 108.617 45.7202 100.625C45.7202 92.6328 51.8958 86.0939 59.8878 86.0939C67.5165 86.0939 74.0554 92.6328 74.0554 100.625C74.0554 108.617 67.8797 115.156 59.8878 115.156ZM154.338 79.1917C156.155 77.0121 159.424 76.6489 161.604 78.4652C163.783 79.9183 164.51 83.1877 162.694 85.3674L149.616 101.715L162.694 118.062C164.51 120.241 163.783 123.148 161.604 124.964C159.424 126.417 156.155 126.054 154.338 124.237L143.077 110.433L131.816 124.237C129.999 126.417 126.73 126.78 124.55 124.964C122.37 123.511 121.644 120.241 123.46 118.062L136.538 101.715L123.824 85.0041C122.007 82.8245 122.734 79.9183 124.913 78.1019C127.093 76.6489 130.362 77.0121 132.179 78.8285L143.44 92.9961L154.338 79.1917ZM41.3609 55.9424C43.9038 55.9424 46.0835 58.122 46.0835 60.6649V81.3714C50.0794 78.4652 54.802 76.6489 60.251 76.6489C69.3328 76.6489 76.9615 81.7346 80.9575 89.7266C84.9535 82.0979 92.5822 76.6489 101.664 76.6489C114.742 76.6489 124.913 87.547 124.913 100.988C124.913 114.429 114.378 125.327 101.664 125.327C92.5822 125.327 84.9535 120.241 80.9575 112.249C76.9615 119.878 69.3328 125.327 60.251 125.327C47.5365 125.327 37.0017 114.792 37.0017 101.351V60.6649C36.6384 58.122 38.818 55.9424 41.3609 55.9424Z" fill="white"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_2583_2763" x1="100" y1="2.98023e-06" x2="100" y2="200" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#2486FC"/>
|
||||
<stop offset="1" stop-color="#0061D5"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
1
apps/agent/assets/mcp-icons/brave_search.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="56" height="64" viewBox="0 0 56 64" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M53.292 15.321l1.5-3.676s-1.909-2.043-4.227-4.358c-2.317-2.315-7.225-.953-7.225-.953L37.751 0H18.12l-5.589 6.334s-4.908-1.362-7.225.953C2.988 9.602 1.08 11.645 1.08 11.645l1.5 3.676-1.91 5.447s5.614 21.236 6.272 23.83c1.295 5.106 2.181 7.08 5.862 9.668 3.68 2.587 10.36 7.08 11.45 7.762 1.091.68 2.455 1.84 3.682 1.84 1.227 0 2.59-1.16 3.68-1.84 1.091-.681 7.77-5.175 11.452-7.762 3.68-2.587 4.567-4.562 5.862-9.668.657-2.594 6.27-23.83 6.27-23.83l-1.908-5.447z" fill="url(#paint0_linear)"/><path fill-rule="evenodd" clip-rule="evenodd" d="M34.888 11.508c.818 0 6.885-1.157 6.885-1.157s7.189 8.68 7.189 10.536c0 1.534-.619 2.134-1.347 2.842-.152.148-.31.3-.467.468l-5.39 5.717a9.42 9.42 0 01-.176.18c-.538.54-1.33 1.336-.772 2.658l.115.269c.613 1.432 1.37 3.2.407 4.99-1.025 1.906-2.78 3.178-3.905 2.967-1.124-.21-3.766-1.589-4.737-2.218-.971-.63-4.05-3.166-4.05-4.137 0-.809 2.214-2.155 3.29-2.81.214-.13.383-.232.48-.298.111-.075.297-.19.526-.332.981-.61 2.754-1.71 2.799-2.197.055-.602.034-.778-.758-2.264-.168-.316-.365-.654-.568-1.004-.754-1.295-1.598-2.745-1.41-3.784.21-1.173 2.05-1.845 3.608-2.415.194-.07.385-.14.567-.209l1.623-.609c1.556-.582 3.284-1.229 3.57-1.36.394-.181.292-.355-.903-.468a54.655 54.655 0 01-.58-.06c-1.48-.157-4.209-.446-5.535-.077-.261.073-.553.152-.86.235-1.49.403-3.317.897-3.493 1.182-.03.05-.06.093-.089.133-.168.238-.277.394-.091 1.406.055.302.169.895.31 1.629.41 2.148 1.053 5.498 1.134 6.25.011.106.024.207.036.305.103.84.171 1.399-.805 1.622l-.255.058c-1.102.252-2.717.623-3.3.623-.584 0-2.2-.37-3.302-.623l-.254-.058c-.976-.223-.907-.782-.804-1.622.012-.098.024-.2.035-.305.081-.753.725-4.112 1.137-6.259.14-.73.253-1.32.308-1.62.185-1.012.076-1.168-.092-1.406a3.743 3.743 0 01-.09-.133c-.174-.285-2-.779-3.491-1.182-.307-.083-.6-.162-.86-.235-1.327-.37-4.055-.08-5.535.077-.226.024-.422.045-.58.06-1.196.113-1.297.287-.903.468.285.131 2.013.778 3.568 1.36.597.223 1.17.437 1.624.609.183.069.373.138.568.21 1.558.57 3.398 1.241 3.608 2.414.187 1.039-.657 2.489-1.41 3.784-.204.35-.4.688-.569 1.004-.791 1.486-.812 1.662-.757 2.264.044.488 1.816 1.587 2.798 2.197.229.142.415.257.526.332.098.066.266.168.48.298 1.076.654 3.29 2 3.29 2.81 0 .97-3.078 3.507-4.05 4.137-.97.63-3.612 2.008-4.737 2.218-1.124.21-2.88-1.061-3.904-2.966-.963-1.791-.207-3.559.406-4.99l.115-.27c.559-1.322-.233-2.118-.772-2.658a9.377 9.377 0 01-.175-.18l-5.39-5.717c-.158-.167-.316-.32-.468-.468-.728-.707-1.346-1.308-1.346-2.842 0-1.855 7.189-10.536 7.189-10.536s6.066 1.157 6.884 1.157c.653 0 1.913-.433 3.227-.885.333-.114.669-.23 1-.34 1.635-.545 2.726-.549 2.726-.549s1.09.004 2.726.549c.33.11.667.226 1 .34 1.313.452 2.574.885 3.226.885zm-1.041 30.706c1.282.66 2.192 1.128 2.536 1.343.445.278.174.803-.232 1.09-.405.285-5.853 4.499-6.381 4.965l-.215.191c-.509.459-1.159 1.044-1.62 1.044-.46 0-1.11-.586-1.62-1.044l-.213-.191c-.53-.466-5.977-4.68-6.382-4.966-.405-.286-.677-.81-.232-1.09.344-.214 1.255-.683 2.539-1.344l1.22-.629c1.92-.992 4.315-1.837 4.689-1.837.373 0 2.767.844 4.689 1.837.436.226.845.437 1.222.63z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M43.34 6.334L37.751 0H18.12l-5.589 6.334s-4.908-1.362-7.225.953c0 0 6.544-.59 8.793 3.064 0 0 6.066 1.157 6.884 1.157.818 0 2.59-.68 4.226-1.225 1.636-.545 2.727-.549 2.727-.549s1.09.004 2.726.549 3.408 1.225 4.226 1.225c.818 0 6.885-1.157 6.885-1.157 2.249-3.654 8.792-3.064 8.792-3.064-2.317-2.315-7.225-.953-7.225-.953z" fill="url(#paint1_linear)"/><defs><linearGradient id="paint0_linear" x1=".671" y1="64.319" x2="55.2" y2="64.319" gradientUnits="userSpaceOnUse"><stop stop-color="#F50"/><stop offset=".41" stop-color="#F50"/><stop offset=".582" stop-color="#FF2000"/><stop offset="1" stop-color="#FF2000"/></linearGradient><linearGradient id="paint1_linear" x1="6.278" y1="11.466" x2="50.565" y2="11.466" gradientUnits="userSpaceOnUse"><stop stop-color="#FF452A"/><stop offset="1" stop-color="#FF2000"/></linearGradient></defs></svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
252
apps/agent/assets/mcp-icons/cal_com.svg
Normal file
@@ -0,0 +1,252 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="100%" viewBox="0 0 860 860" enable-background="new 0 0 860 860" xml:space="preserve">
|
||||
<path fill="#292929" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M1.000000,801.000000
|
||||
C1.000000,553.305298 1.000000,305.610596 1.447865,57.464870
|
||||
C9.021611,57.017197 9.021502,57.017197 9.008190,50.123905
|
||||
C9.004984,48.463673 9.103076,46.795834 8.977884,45.144890
|
||||
C8.759684,42.267410 9.728286,40.654900 12.880814,40.994350
|
||||
C15.748475,41.303127 17.370836,40.263092 17.017424,37.109661
|
||||
C16.690794,34.195232 17.828167,32.667305 20.937605,33.009239
|
||||
C23.874311,33.332176 25.358154,32.133648 25.012846,29.053125
|
||||
C24.679403,26.078436 25.950268,24.639311 28.991241,25.019115
|
||||
C32.059551,25.402332 33.315140,24.013861 33.000790,21.036680
|
||||
C32.685429,18.049910 33.979393,17.014265 36.985378,16.846327
|
||||
C38.364262,16.769293 40.823277,14.936883 40.775894,14.002795
|
||||
C40.548393,9.517446 42.709217,8.565637 46.524349,8.964396
|
||||
C48.330853,9.153214 50.195740,8.813924 51.995201,9.033412
|
||||
C55.950733,9.515888 57.557449,7.907007 57.029888,3.985816
|
||||
C56.898186,3.006922 57.003582,1.996130 57.000000,1.000000
|
||||
C307.361359,1.000000 557.722717,1.000000 808.541992,1.432982
|
||||
C809.122742,4.280973 809.245483,6.695983 809.362976,9.008148
|
||||
C813.599365,9.008148 817.238525,9.127791 820.865662,8.970354
|
||||
C823.776062,8.844029 825.346863,9.778153 825.001526,12.911630
|
||||
C824.677917,15.848221 825.858765,17.351006 828.946777,17.013931
|
||||
C831.936707,16.687565 833.333984,17.971933 832.981140,21.014172
|
||||
C832.625488,24.080858 834.065613,25.326727 837.033142,24.998018
|
||||
C840.104675,24.657778 841.268433,26.087555 841.026306,29.065149
|
||||
C840.922302,30.344017 841.143127,31.649300 841.232544,33.227886
|
||||
C845.844482,32.660969 850.147217,32.324524 849.231689,38.955315
|
||||
C849.157532,39.492630 851.080994,40.951801 851.969910,40.867107
|
||||
C856.441589,40.441048 857.419739,42.678406 857.038025,46.523270
|
||||
C856.825378,48.664490 857.135559,50.854618 856.970215,53.004253
|
||||
C856.736755,56.040195 857.974365,57.363819 861.000000,57.000000
|
||||
C861.000000,304.694702 861.000000,552.389404 860.621704,800.543945
|
||||
C857.403625,800.868652 856.452454,802.104553 856.789673,804.983093
|
||||
C857.136536,807.943237 857.155212,810.989563 856.857361,813.951965
|
||||
C856.750061,815.019348 855.199768,816.880920 854.489197,816.799438
|
||||
C848.870483,816.154846 848.632080,819.500244 848.959900,823.568909
|
||||
C849.106567,825.389160 848.883728,827.237305 848.993774,829.062805
|
||||
C849.154419,831.728333 848.246155,833.281738 845.335022,832.964233
|
||||
C842.144409,832.616150 840.601074,833.881653 840.993469,837.194885
|
||||
C841.378479,840.445068 839.537415,840.999146 836.764954,841.120483
|
||||
C835.497437,841.175964 833.151306,842.650330 833.223389,843.249023
|
||||
C834.010864,849.790222 829.689697,849.115662 825.624512,848.989441
|
||||
C823.794373,848.932617 821.857117,848.649597 820.162659,849.139954
|
||||
C818.945374,849.492371 817.089966,851.043945 817.169006,851.909912
|
||||
C817.628967,856.951416 814.720764,857.282898 810.982788,857.008972
|
||||
C808.994751,856.863281 806.976318,857.122559 804.990173,856.965027
|
||||
C801.952271,856.723938 800.616394,857.959473 801.000000,861.000000
|
||||
C555.971985,861.000000 310.943939,861.000000 65.450897,860.582275
|
||||
C64.481964,854.674500 60.212490,857.231384 57.690025,857.125244
|
||||
C49.733109,856.790527 49.729267,857.007935 48.653473,849.756042
|
||||
C48.611664,849.474243 48.275009,849.236206 48.073071,848.983643
|
||||
C44.450493,848.989502 40.826706,848.886414 37.211929,849.022583
|
||||
C34.395195,849.128662 32.642517,848.361450 33.015579,845.161682
|
||||
C33.402672,841.841675 31.813314,840.623718 28.664013,840.959656
|
||||
C25.768969,841.268433 24.775898,839.736450 25.035671,837.081299
|
||||
C25.320675,834.168274 24.193420,832.611938 21.097826,832.982605
|
||||
C17.646875,833.395874 16.958651,831.552490 16.885338,828.536987
|
||||
C16.856565,827.353516 15.245986,825.138672 14.542875,825.211060
|
||||
C9.047523,825.776855 8.670876,822.645142 8.964444,818.491760
|
||||
C9.186049,815.356506 8.974668,812.190674 8.970829,808.589600
|
||||
C9.004595,800.994568 9.004595,800.994568 1.968962,800.997864
|
||||
C1.645974,800.997986 1.322987,800.999268 1.000000,801.000000
|
||||
M608.933350,471.500000
|
||||
C608.933350,435.749481 608.933350,399.998962 608.933350,364.305573
|
||||
C590.312561,364.305573 572.246765,364.305573 553.859802,364.305573
|
||||
C553.859802,374.998871 553.859802,385.394867 553.859802,395.799988
|
||||
C553.388000,395.776947 553.151794,395.825500 553.107605,395.754517
|
||||
C551.879761,393.782837 550.717102,391.769348 549.452393,389.822052
|
||||
C542.164124,378.600494 532.516418,370.111542 519.790710,365.750763
|
||||
C491.234344,355.965240 463.614746,358.823303 437.588074,373.772064
|
||||
C392.542633,399.644501 371.803345,456.352783 388.010315,508.348907
|
||||
C402.074707,553.470947 442.377899,586.893738 491.658600,584.948242
|
||||
C512.362183,584.130859 531.029785,578.415283 544.786743,561.735901
|
||||
C547.968872,557.877686 550.622864,553.583862 554.151245,548.598328
|
||||
C554.151245,559.376282 554.151245,569.107178 554.151245,578.749390
|
||||
C572.622498,578.749390 590.672913,578.749390 608.933350,578.749390
|
||||
C608.933350,543.100403 608.933350,507.800201 608.933350,471.500000
|
||||
M186.725815,448.639496
|
||||
C185.095032,435.638611 185.630280,422.705841 188.093552,409.857544
|
||||
C199.507690,350.321747 260.670502,319.435608 314.041229,346.620941
|
||||
C322.785889,351.075165 330.389008,357.770538 339.007050,363.769287
|
||||
C351.746277,353.230988 365.155701,342.138275 378.719788,330.917633
|
||||
C365.901276,314.422089 350.770477,301.768341 331.838623,293.991302
|
||||
C307.336548,283.926086 281.741791,282.166046 255.779266,285.023743
|
||||
C220.415939,288.916168 190.031601,303.423645 165.711349,329.651978
|
||||
C141.982681,355.242279 129.391678,385.832153 126.691292,420.462616
|
||||
C123.035805,467.341705 136.343536,508.717072 170.157852,541.781677
|
||||
C212.835724,583.513428 264.405853,592.425842 320.871307,578.153442
|
||||
C344.869141,572.087646 363.858063,557.970764 379.037781,538.119202
|
||||
C365.581299,526.302124 352.361572,514.692993 339.315430,503.236267
|
||||
C338.720764,503.446747 338.535339,503.460754 338.425873,503.559204
|
||||
C337.436554,504.448608 336.452179,505.343872 335.481812,506.253906
|
||||
C312.983002,527.354553 286.219116,533.645691 256.471924,528.304443
|
||||
C217.593079,521.323547 191.770508,488.878601 186.725815,448.639496
|
||||
M647.744141,351.499847
|
||||
C647.744141,427.082062 647.744141,502.664276 647.744141,578.382446
|
||||
C666.304504,578.382446 684.343018,578.382446 702.442871,578.382446
|
||||
C702.442871,477.804169 702.442871,377.593262 702.442871,277.290985
|
||||
C684.107544,277.290985 666.040771,277.290985 647.744141,277.290985
|
||||
C647.744141,301.890289 647.744141,326.195038 647.744141,351.499847
|
||||
z"/>
|
||||
<path fill="#000000" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M56.531342,1.000000
|
||||
C57.003582,1.996130 56.898186,3.006922 57.029888,3.985816
|
||||
C57.557449,7.907007 55.950733,9.515888 51.995201,9.033412
|
||||
C50.195740,8.813924 48.330853,9.153214 46.524349,8.964396
|
||||
C42.709217,8.565637 40.548393,9.517446 40.775894,14.002795
|
||||
C40.823277,14.936883 38.364262,16.769293 36.985378,16.846327
|
||||
C33.979393,17.014265 32.685429,18.049910 33.000790,21.036680
|
||||
C33.315140,24.013861 32.059551,25.402332 28.991241,25.019115
|
||||
C25.950268,24.639311 24.679403,26.078436 25.012846,29.053125
|
||||
C25.358154,32.133648 23.874311,33.332176 20.937605,33.009239
|
||||
C17.828167,32.667305 16.690794,34.195232 17.017424,37.109661
|
||||
C17.370836,40.263092 15.748475,41.303127 12.880814,40.994350
|
||||
C9.728286,40.654900 8.759684,42.267410 8.977884,45.144890
|
||||
C9.103076,46.795834 9.004984,48.463673 9.008190,50.123905
|
||||
C9.021502,57.017197 9.021611,57.017197 1.447865,57.006916
|
||||
C1.000000,38.406548 1.000000,19.813091 1.000000,1.000000
|
||||
C19.353643,1.000000 37.708164,1.000000 56.531342,1.000000
|
||||
z"/>
|
||||
<path fill="#000000" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M8.955997,809.038452
|
||||
C8.974668,812.190674 9.186049,815.356506 8.964444,818.491760
|
||||
C8.670876,822.645142 9.047523,825.776855 14.542875,825.211060
|
||||
C15.245986,825.138672 16.856565,827.353516 16.885338,828.536987
|
||||
C16.958651,831.552490 17.646875,833.395874 21.097826,832.982605
|
||||
C24.193420,832.611938 25.320675,834.168274 25.035671,837.081299
|
||||
C24.775898,839.736450 25.768969,841.268433 28.664013,840.959656
|
||||
C31.813314,840.623718 33.402672,841.841675 33.015579,845.161682
|
||||
C32.642517,848.361450 34.395195,849.128662 37.211929,849.022583
|
||||
C40.826706,848.886414 44.450493,848.989502 48.073071,848.983643
|
||||
C48.275009,849.236206 48.611664,849.474243 48.653473,849.756042
|
||||
C49.729267,857.007935 49.733109,856.790527 57.690025,857.125244
|
||||
C60.212490,857.231384 64.481964,854.674500 64.992950,860.582275
|
||||
C43.747437,861.000000 22.494875,861.000000 1.000000,861.000000
|
||||
C1.000000,843.979858 1.000000,826.958618 1.443019,809.468628
|
||||
C4.242692,809.012817 6.599345,809.025635 8.955997,809.038452
|
||||
z"/>
|
||||
<path fill="#000000" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M861.000000,56.531342
|
||||
C857.974365,57.363819 856.736755,56.040195 856.970215,53.004253
|
||||
C857.135559,50.854618 856.825378,48.664490 857.038025,46.523270
|
||||
C857.419739,42.678406 856.441589,40.441048 851.969910,40.867107
|
||||
C851.080994,40.951801 849.157532,39.492630 849.231689,38.955315
|
||||
C850.147217,32.324524 845.844482,32.660969 841.232544,33.227886
|
||||
C841.143127,31.649300 840.922302,30.344017 841.026306,29.065149
|
||||
C841.268433,26.087555 840.104675,24.657778 837.033142,24.998018
|
||||
C834.065613,25.326727 832.625488,24.080858 832.981140,21.014172
|
||||
C833.333984,17.971933 831.936707,16.687565 828.946777,17.013931
|
||||
C825.858765,17.351006 824.677917,15.848221 825.001526,12.911630
|
||||
C825.346863,9.778153 823.776062,8.844029 820.865662,8.970354
|
||||
C817.238525,9.127791 813.599365,9.008148 809.362976,9.008148
|
||||
C809.245483,6.695983 809.122742,4.280973 809.000000,1.432982
|
||||
C826.262817,1.000000 843.525635,1.000000 861.000000,1.000000
|
||||
C861.000000,19.353685 861.000000,37.708183 861.000000,56.531342
|
||||
z"/>
|
||||
<path fill="#000000" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M801.468628,861.000000
|
||||
C800.616394,857.959473 801.952271,856.723938 804.990173,856.965027
|
||||
C806.976318,857.122559 808.994751,856.863281 810.982788,857.008972
|
||||
C814.720764,857.282898 817.628967,856.951416 817.169006,851.909912
|
||||
C817.089966,851.043945 818.945374,849.492371 820.162659,849.139954
|
||||
C821.857117,848.649597 823.794373,848.932617 825.624512,848.989441
|
||||
C829.689697,849.115662 834.010864,849.790222 833.223389,843.249023
|
||||
C833.151306,842.650330 835.497437,841.175964 836.764954,841.120483
|
||||
C839.537415,840.999146 841.378479,840.445068 840.993469,837.194885
|
||||
C840.601074,833.881653 842.144409,832.616150 845.335022,832.964233
|
||||
C848.246155,833.281738 849.154419,831.728333 848.993774,829.062805
|
||||
C848.883728,827.237305 849.106567,825.389160 848.959900,823.568909
|
||||
C848.632080,819.500244 848.870483,816.154846 854.489197,816.799438
|
||||
C855.199768,816.880920 856.750061,815.019348 856.857361,813.951965
|
||||
C857.155212,810.989563 857.136536,807.943237 856.789673,804.983093
|
||||
C856.452454,802.104553 857.403625,800.868652 860.621704,801.001892
|
||||
C861.000000,820.926819 861.000000,840.853638 861.000000,861.000000
|
||||
C841.312988,861.000000 821.625122,861.000000 801.468628,861.000000
|
||||
z"/>
|
||||
<path fill="#141414" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M8.970829,808.589600
|
||||
C6.599345,809.025635 4.242692,809.012817 1.443019,809.000000
|
||||
C1.000000,806.629456 1.000000,804.258850 1.000000,801.444153
|
||||
C1.322987,800.999268 1.645974,800.997986 1.968962,800.997864
|
||||
C9.004595,800.994568 9.004595,800.994568 8.970829,808.589600
|
||||
z"/>
|
||||
<path fill="#FEFEFE" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M608.933350,472.000000
|
||||
C608.933350,507.800201 608.933350,543.100403 608.933350,578.749390
|
||||
C590.672913,578.749390 572.622498,578.749390 554.151245,578.749390
|
||||
C554.151245,569.107178 554.151245,559.376282 554.151245,548.598328
|
||||
C550.622864,553.583862 547.968872,557.877686 544.786743,561.735901
|
||||
C531.029785,578.415283 512.362183,584.130859 491.658600,584.948242
|
||||
C442.377899,586.893738 402.074707,553.470947 388.010315,508.348907
|
||||
C371.803345,456.352783 392.542633,399.644501 437.588074,373.772064
|
||||
C463.614746,358.823303 491.234344,355.965240 519.790710,365.750763
|
||||
C532.516418,370.111542 542.164124,378.600494 549.452393,389.822052
|
||||
C550.717102,391.769348 551.879761,393.782837 553.107605,395.754517
|
||||
C553.151794,395.825500 553.388000,395.776947 553.859802,395.799988
|
||||
C553.859802,385.394867 553.859802,374.998871 553.859802,364.305573
|
||||
C572.246765,364.305573 590.312561,364.305573 608.933350,364.305573
|
||||
C608.933350,399.998962 608.933350,435.749481 608.933350,472.000000
|
||||
M478.976898,413.286865
|
||||
C453.431671,422.391785 438.543915,443.953400 438.711456,472.509064
|
||||
C438.990021,519.981567 482.918488,547.278931 523.667114,527.373962
|
||||
C551.094604,513.976135 562.997742,479.343994 551.664185,448.666687
|
||||
C540.943726,419.648712 511.608704,405.134949 478.976898,413.286865
|
||||
z"/>
|
||||
<path fill="#FEFEFE" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M186.781860,449.083893
|
||||
C191.770508,488.878601 217.593079,521.323547 256.471924,528.304443
|
||||
C286.219116,533.645691 312.983002,527.354553 335.481812,506.253906
|
||||
C336.452179,505.343872 337.436554,504.448608 338.425873,503.559204
|
||||
C338.535339,503.460754 338.720764,503.446747 339.315430,503.236267
|
||||
C352.361572,514.692993 365.581299,526.302124 379.037781,538.119202
|
||||
C363.858063,557.970764 344.869141,572.087646 320.871307,578.153442
|
||||
C264.405853,592.425842 212.835724,583.513428 170.157852,541.781677
|
||||
C136.343536,508.717072 123.035805,467.341705 126.691292,420.462616
|
||||
C129.391678,385.832153 141.982681,355.242279 165.711349,329.651978
|
||||
C190.031601,303.423645 220.415939,288.916168 255.779266,285.023743
|
||||
C281.741791,282.166046 307.336548,283.926086 331.838623,293.991302
|
||||
C350.770477,301.768341 365.901276,314.422089 378.719788,330.917633
|
||||
C365.155701,342.138275 351.746277,353.230988 339.007050,363.769287
|
||||
C330.389008,357.770538 322.785889,351.075165 314.041229,346.620941
|
||||
C260.670502,319.435608 199.507690,350.321747 188.093552,409.857544
|
||||
C185.630280,422.705841 185.095032,435.638611 186.781860,449.083893
|
||||
z"/>
|
||||
<path fill="#FDFDFD" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M647.744141,350.999817
|
||||
C647.744141,326.195038 647.744141,301.890289 647.744141,277.290985
|
||||
C666.040771,277.290985 684.107544,277.290985 702.442871,277.290985
|
||||
C702.442871,377.593262 702.442871,477.804169 702.442871,578.382446
|
||||
C684.343018,578.382446 666.304504,578.382446 647.744141,578.382446
|
||||
C647.744141,502.664276 647.744141,427.082062 647.744141,350.999817
|
||||
z"/>
|
||||
<path fill="#2A2A2A" opacity="1.000000" stroke="none"
|
||||
d="
|
||||
M479.370300,413.190063
|
||||
C511.608704,405.134949 540.943726,419.648712 551.664185,448.666687
|
||||
C562.997742,479.343994 551.094604,513.976135 523.667114,527.373962
|
||||
C482.918488,547.278931 438.990021,519.981567 438.711456,472.509064
|
||||
C438.543915,443.953400 453.431671,422.391785 479.370300,413.190063
|
||||
z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
1
apps/agent/assets/mcp-icons/clickup.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 90 90" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="0%" y1="68.01%" x2="100%" y2="68.01%" id="a"><stop stop-color="#8930FD" offset="0%"/><stop stop-color="#49CCF9" offset="100%"/></linearGradient><linearGradient x1="0%" y1="68.01%" x2="100%" y2="68.01%" id="b"><stop stop-color="#FF02F0" offset="0%"/><stop stop-color="#FFC800" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><path fill="#FFF" d="M0 0h90v90H0z"/><g fill-rule="nonzero"><path d="m.166 49.48 9.89-7.576c5.255 6.858 10.838 10.02 17.052 10.02 6.18 0 11.606-3.125 16.624-9.929l10.031 7.394c-7.24 9.812-16.237 14.996-26.655 14.996-10.385 0-19.47-5.151-26.942-14.904Z" fill="url(#a)" transform="translate(18 13)"/><path fill="url(#b)" d="M27.075 16.549 9.47 31.719 1.333 22.28 27.113.066l25.574 22.232-8.174 9.404z" transform="translate(18 13)"/></g></g></svg>
|
||||
|
After Width: | Height: | Size: 880 B |
1
apps/agent/assets/mcp-icons/cloudflare.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="24" height="24"><path d="M8.16 23h21.177v-5.86l-4.023-2.307-.694-.3-16.46.113z" fill="#fff"/><path d="M22.012 22.222c.197-.675.122-1.294-.206-1.754-.3-.422-.807-.666-1.416-.694l-11.545-.15c-.075 0-.14-.038-.178-.094s-.047-.13-.028-.206c.038-.113.15-.197.272-.206l11.648-.15c1.38-.066 2.88-1.182 3.404-2.55l.666-1.735a.38.38 0 0 0 .02-.225c-.75-3.395-3.78-5.927-7.4-5.927-3.34 0-6.17 2.157-7.184 5.15-.657-.488-1.5-.75-2.392-.666-1.604.16-2.9 1.444-3.048 3.048a3.58 3.58 0 0 0 .084 1.191A4.84 4.84 0 0 0 0 22.1c0 .234.02.47.047.703.02.113.113.197.225.197H21.58a.29.29 0 0 0 .272-.206l.16-.572z" fill="#f38020"/><path d="M25.688 14.803l-.32.01c-.075 0-.14.056-.17.13l-.45 1.566c-.197.675-.122 1.294.206 1.754.3.422.807.666 1.416.694l2.457.15c.075 0 .14.038.178.094s.047.14.028.206c-.038.113-.15.197-.272.206l-2.56.15c-1.388.066-2.88 1.182-3.404 2.55l-.188.478c-.038.094.028.188.13.188h8.797a.23.23 0 0 0 .225-.169A6.41 6.41 0 0 0 32 21.106a6.32 6.32 0 0 0-6.312-6.302" fill="#faae40"/></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
12
apps/agent/assets/mcp-icons/discord.svg
Normal file
@@ -0,0 +1,12 @@
|
||||
<svg width="24" height="24" viewBox="0 0 71 55" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g clip-path="url(#clip0)">
|
||||
<path d="M60.1045 4.8978C55.5792 2.8214 50.7265 1.2916 45.6527 0.41542C45.5603 0.39851 45.468 0.440769 45.4204 0.525289C44.7963 1.6353 44.105 3.0834 43.6209 4.2216C38.1637 3.4046 32.7345 3.4046 27.3892 4.2216C26.905 3.0581 26.1886 1.6353 25.5617 0.525289C25.5141 0.443589 25.4218 0.40133 25.3294 0.41542C20.2584 1.2888 15.4057 2.8186 10.8776 4.8978C10.8384 4.9147 10.8048 4.9429 10.7825 4.9795C1.57795 18.7309 -0.943561 32.1443 0.293408 45.3914C0.299005 45.4562 0.335386 45.5182 0.385761 45.5576C6.45866 50.0174 12.3413 52.7249 18.1147 54.5195C18.2071 54.5477 18.305 54.5139 18.3638 54.4378C19.7295 52.5728 20.9469 50.6063 21.9907 48.5383C22.0523 48.4172 21.9935 48.2735 21.8676 48.2256C19.9366 47.4931 18.0979 46.6 16.3292 45.5858C16.1893 45.5041 16.1781 45.304 16.3068 45.2082C16.679 44.9293 17.0513 44.6391 17.4067 44.3461C17.471 44.2926 17.5606 44.2813 17.6362 44.3151C29.2558 49.6202 41.8354 49.6202 53.3179 44.3151C53.3935 44.2785 53.4831 44.2898 53.5502 44.3433C53.9057 44.6363 54.2779 44.9293 54.6529 45.2082C54.7816 45.304 54.7732 45.5041 54.6333 45.5858C52.8646 46.6197 51.0259 47.4931 49.0921 48.2228C48.9662 48.2707 48.9102 48.4172 48.9718 48.5383C50.038 50.6034 51.2554 52.5699 52.5959 54.435C52.6519 54.5139 52.7526 54.5477 52.845 54.5195C58.6464 52.7249 64.529 50.0174 70.6019 45.5576C70.6551 45.5182 70.6887 45.459 70.6943 45.3942C72.1747 30.0791 68.2147 16.7757 60.1968 4.9823C60.1772 4.9429 60.1437 4.9147 60.1045 4.8978ZM23.7259 37.3253C20.2276 37.3253 17.3451 34.1136 17.3451 30.1693C17.3451 26.225 20.1717 23.0133 23.7259 23.0133C27.308 23.0133 30.1626 26.2532 30.1066 30.1693C30.1066 34.1136 27.28 37.3253 23.7259 37.3253ZM47.3178 37.3253C43.8196 37.3253 40.9371 34.1136 40.9371 30.1693C40.9371 26.225 43.7636 23.0133 47.3178 23.0133C50.9 23.0133 53.7545 26.2532 53.6986 30.1693C53.6986 34.1136 50.9 37.3253 47.3178 37.3253Z" fill="#5865F2">
|
||||
</path>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0">
|
||||
<rect width="71" height="55" fill="white">
|
||||
</rect>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
1
apps/agent/assets/mcp-icons/dropbox.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" id="svg126" version="1.1" viewBox="-35.3175 -50 306.085 300"><defs id="defs112"><style id="style110">.cls-1{fill:#0061ff}</style></defs><path id="polygon116" class="cls-1" d="M58.86 75l58.87-37.5L58.86 0 0 37.5z"/><path id="polygon118" class="cls-1" d="M176.59 75l58.86-37.5L176.59 0l-58.86 37.5z"/><path id="polygon120" class="cls-1" d="M117.73 112.5L58.86 75 0 112.5 58.86 150z"/><path id="polygon122" class="cls-1" d="M176.59 150l58.86-37.5L176.59 75l-58.86 37.5z"/><path id="polygon124" class="cls-1" d="M176.59 162.5L117.73 125l-58.87 37.5 58.87 37.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 629 B |
BIN
apps/agent/assets/mcp-icons/exa.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
1
apps/agent/assets/mcp-icons/google_forms.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="24px" height="24px"><path fill="#7b1fa2" d="M38,44H12c-2.209,0-4-1.791-4-4V8c0-2.209,1.791-4,4-4h18l12,12v24C42,42.209,40.209,44,38,44z"/><path fill="#b39ddb" d="M30,4l12,12H30V4z"/><circle cx="17" cy="22" r="2" fill="#fff"/><circle cx="17" cy="28" r="2" fill="#fff"/><circle cx="17" cy="34" r="2" fill="#fff"/><rect x="22" y="21" width="12" height="2" fill="#fff"/><rect x="22" y="27" width="12" height="2" fill="#fff"/><rect x="22" y="33" width="12" height="2" fill="#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 550 B |
20
apps/agent/assets/mcp-icons/hubspot.svg
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="24" height="24">
|
||||
<path style="fill:#FF7B57;" d="M447.931,194.997c-17.705-13.524-38.519-22.393-60.536-25.796h0.095v-60.718 c16.405-7.662,26.92-24.098,27-42.204v-1.419c-0.069-25.805-20.972-46.708-46.777-46.777h-1.419 c-25.806,0.069-46.708,20.972-46.777,46.777v1.419c0.08,18.106,10.595,34.542,27,42.204v60.845 c-23.106,3.533-44.869,13.109-63.084,27.757L116.448,67.036c7.593-28.426-9.297-57.625-37.723-65.218 C50.299-5.775,21.1,11.114,13.507,39.54c-7.593,28.426,9.296,57.625,37.723,65.218c13.592,3.63,28.067,1.738,40.268-5.266 l164.177,127.809c-30.264,45.659-29.451,105.2,2.05,150.014l-49.963,49.963c-4.011-1.277-8.187-1.958-12.396-2.019 c-23.953,0-43.37,19.417-43.37,43.37S171.413,512,195.366,512c23.953,0,43.37-19.418,43.37-43.371 c-0.059-4.208-0.739-8.386-2.019-12.396l49.427-49.426c58.49,44.676,142.122,33.478,186.799-25.012 C517.619,323.305,506.421,239.673,447.931,194.997z M367.082,369.272l-0.158-0.032c-37.767-0.087-68.313-30.774-68.225-68.541 c0.087-37.767,30.774-68.312,68.541-68.226c37.718,0.087,68.243,30.697,68.226,68.415 C435.465,338.656,404.849,369.272,367.082,369.272z"/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
4
apps/agent/assets/mcp-icons/intercom.svg
Normal file
@@ -0,0 +1,4 @@
|
||||
<svg width="232" height="228" viewBox="0 0 232 228" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<path d="M198.821 125.463C198.821 127.496 198.02 129.445 196.594 130.882C195.168 132.319 193.235 133.127 191.218 133.127C189.202 133.127 187.268 132.319 185.842 130.882C184.416 129.445 183.615 127.496 183.615 125.463V57.0003C183.615 54.9679 184.416 53.0187 185.842 51.5816C187.268 50.1444 189.202 49.337 191.218 49.337C193.235 49.337 195.168 50.1444 196.594 51.5816C198.02 53.0187 198.821 54.9679 198.821 57.0003V125.463ZM196.182 172.9C195.177 173.913 166.902 197.663 115.064 197.663C63.227 197.663 35.1406 174.04 33.9467 173.026C33.1944 172.387 32.5747 171.604 32.1231 170.723C31.6716 169.841 31.3971 168.879 31.3153 167.89C31.2336 166.902 31.3463 165.907 31.6469 164.962C31.9475 164.018 32.4301 163.142 33.0671 162.386V162.386C34.3793 160.856 36.2386 159.911 38.2396 159.756C40.2406 159.602 42.2209 160.252 43.7487 161.563C44.1886 161.88 69.4475 182.526 115.002 182.526C160.556 182.526 186.003 161.753 186.254 161.563C187.799 160.263 189.786 159.622 191.792 159.776C193.799 159.93 195.667 160.866 196.999 162.386C198.281 163.894 198.921 165.851 198.779 167.831C198.638 169.811 197.727 171.656 196.245 172.963L196.182 172.9ZM31.2449 57.0003C31.3585 54.9615 32.2683 53.0508 33.7754 51.6861C35.2824 50.3213 37.2642 49.6134 39.2876 49.717C41.1633 49.8244 42.9332 50.628 44.2559 51.9729C45.5786 53.3178 46.3604 55.1088 46.4505 57.0003V125.337C46.4505 127.369 45.6495 129.318 44.2237 130.755C42.7979 132.193 40.8641 133 38.8477 133C36.8313 133 34.8975 132.193 33.4717 130.755C32.0459 129.318 31.2449 127.369 31.2449 125.337V57.0003ZM69.3847 41.8004C69.4983 39.7615 70.4081 37.8509 71.9151 36.4862C73.4222 35.1214 75.404 34.4135 77.4273 34.5171C79.3031 34.6245 81.073 35.4281 82.3957 36.773C83.7183 38.1179 84.5001 39.9088 84.5903 41.8004V143.133C84.5903 145.166 83.7893 147.115 82.3635 148.552C80.9377 149.989 79.0039 150.796 76.9875 150.796C74.9711 150.796 73.0373 149.989 71.6115 148.552C70.1857 147.115 69.3847 145.166 69.3847 143.133V41.8004ZM107.713 38.0004C107.713 35.968 108.514 34.0188 109.94 32.5817C111.366 31.1445 113.299 30.3371 115.316 30.3371C117.332 30.3371 119.266 31.1445 120.692 32.5817C122.118 34.0188 122.919 35.968 122.919 38.0004V148.2C122.919 150.232 122.118 152.181 120.692 153.619C119.266 155.056 117.332 155.863 115.316 155.863C113.299 155.863 111.366 155.056 109.94 153.619C108.514 152.181 107.713 150.232 107.713 148.2V38.0004ZM145.413 41.8004C145.413 39.768 146.214 37.8188 147.64 36.3816C149.065 34.9445 150.999 34.1371 153.016 34.1371C155.032 34.1371 156.966 34.9445 158.392 36.3816C159.817 37.8188 160.618 39.768 160.618 41.8004V143.133C160.618 145.166 159.817 147.115 158.392 148.552C156.966 149.989 155.032 150.796 153.016 150.796C150.999 150.796 149.065 149.989 147.64 148.552C146.214 147.115 145.413 145.166 145.413 143.133V41.8004ZM200.895 0.00063243H29.4856C25.7507 -0.024391 22.0476 0.693392 18.5883 2.11288C15.1289 3.53237 11.9814 5.6257 9.32581 8.27299C6.67023 10.9203 4.55877 14.0695 3.11235 17.5405C1.66592 21.0114 0.912928 24.7358 0.896484 28.5005L0.896484 199.5C0.912928 203.264 1.66592 206.989 3.11235 210.46C4.55877 213.93 6.67023 217.08 9.32581 219.727C11.9814 222.374 15.1289 224.468 18.5883 225.887C22.0476 227.307 25.7507 228.024 29.4856 227.999H200.895C204.624 228.024 208.322 227.309 211.777 225.893C215.233 224.478 218.377 222.39 221.032 219.749C223.687 217.109 225.8 213.967 227.25 210.503C228.7 207.04 229.459 203.322 229.484 199.563V199.563V28.5005C229.467 24.7412 228.716 21.022 227.274 17.5552C225.831 14.0884 223.725 10.942 221.076 8.29549C218.428 5.64903 215.287 3.55438 211.835 2.13115C208.383 0.707912 204.687 -0.0160384 200.957 0.00063243V0.00063243" fill="#081D34">
|
||||
</path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
BIN
apps/agent/assets/mcp-icons/memo.webp
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
22
apps/agent/assets/mcp-icons/microsoft_teams.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2228.833 2073.333">
|
||||
<path fill="#5059C9" d="M1554.637,777.5h575.713c54.391,0,98.483,44.092,98.483,98.483c0,0,0,0,0,0v524.398 c0,199.901-162.051,361.952-361.952,361.952h0h-1.711c-199.901,0.028-361.975-162-362.004-361.901c0-0.017,0-0.034,0-0.052V828.971 C1503.167,800.544,1526.211,777.5,1554.637,777.5L1554.637,777.5z"/>
|
||||
<circle fill="#5059C9" cx="1943.75" cy="440.583" r="233.25"/>
|
||||
<circle fill="#7B83EB" cx="1218.083" cy="336.917" r="336.917"/>
|
||||
<path fill="#7B83EB" d="M1667.323,777.5H717.01c-53.743,1.33-96.257,45.931-95.01,99.676v598.105 c-7.505,322.519,247.657,590.16,570.167,598.053c322.51-7.893,577.671-275.534,570.167-598.053V877.176 C1763.579,823.431,1721.066,778.83,1667.323,777.5z"/>
|
||||
<path opacity=".1" d="M1244,777.5v838.145c-0.258,38.435-23.549,72.964-59.09,87.598 c-11.316,4.787-23.478,7.254-35.765,7.257H667.613c-6.738-17.105-12.958-34.21-18.142-51.833 c-18.144-59.477-27.402-121.307-27.472-183.49V877.02c-1.246-53.659,41.198-98.19,94.855-99.52H1244z"/>
|
||||
<path opacity=".2" d="M1192.167,777.5v889.978c-0.002,12.287-2.47,24.449-7.257,35.765 c-14.634,35.541-49.163,58.833-87.598,59.09H691.975c-8.812-17.105-17.105-34.21-24.362-51.833 c-7.257-17.623-12.958-34.21-18.142-51.833c-18.144-59.476-27.402-121.307-27.472-183.49V877.02 c-1.246-53.659,41.198-98.19,94.855-99.52H1192.167z"/>
|
||||
<path opacity=".2" d="M1192.167,777.5v786.312c-0.395,52.223-42.632,94.46-94.855,94.855h-447.84 c-18.144-59.476-27.402-121.307-27.472-183.49V877.02c-1.246-53.659,41.198-98.19,94.855-99.52H1192.167z"/>
|
||||
<path opacity=".2" d="M1140.333,777.5v786.312c-0.395,52.223-42.632,94.46-94.855,94.855H649.472 c-18.144-59.476-27.402-121.307-27.472-183.49V877.02c-1.246-53.659,41.198-98.19,94.855-99.52H1140.333z"/>
|
||||
<path opacity=".1" d="M1244,509.522v163.275c-8.812,0.518-17.105,1.037-25.917,1.037 c-8.812,0-17.105-0.518-25.917-1.037c-17.496-1.161-34.848-3.937-51.833-8.293c-104.963-24.857-191.679-98.469-233.25-198.003 c-7.153-16.715-12.706-34.071-16.587-51.833h258.648C1201.449,414.866,1243.801,457.217,1244,509.522z"/>
|
||||
<path opacity=".2" d="M1192.167,561.355v111.442c-17.496-1.161-34.848-3.937-51.833-8.293 c-104.963-24.857-191.679-98.469-233.25-198.003h190.228C1149.616,466.699,1191.968,509.051,1192.167,561.355z"/>
|
||||
<path opacity=".2" d="M1192.167,561.355v111.442c-17.496-1.161-34.848-3.937-51.833-8.293 c-104.963-24.857-191.679-98.469-233.25-198.003h190.228C1149.616,466.699,1191.968,509.051,1192.167,561.355z"/>
|
||||
<path opacity=".2" d="M1140.333,561.355v103.148c-104.963-24.857-191.679-98.469-233.25-198.003 h138.395C1097.783,466.699,1140.134,509.051,1140.333,561.355z"/>
|
||||
<linearGradient id="a" gradientUnits="userSpaceOnUse" x1="198.099" y1="1683.0726" x2="942.2344" y2="394.2607" gradientTransform="matrix(1 0 0 -1 0 2075.3333)">
|
||||
<stop offset="0" stop-color="#5a62c3"/>
|
||||
<stop offset=".5" stop-color="#4d55bd"/>
|
||||
<stop offset="1" stop-color="#3940ab"/>
|
||||
</linearGradient>
|
||||
<path fill="url(#a)" d="M95.01,466.5h950.312c52.473,0,95.01,42.538,95.01,95.01v950.312c0,52.473-42.538,95.01-95.01,95.01 H95.01c-52.473,0-95.01-42.538-95.01-95.01V561.51C0,509.038,42.538,466.5,95.01,466.5z"/>
|
||||
<path fill="#FFF" d="M820.211,828.193H630.241v517.297H509.211V828.193H320.123V727.844h500.088V828.193z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
23
apps/agent/assets/mcp-icons/mixpanel.svg
Normal file
@@ -0,0 +1,23 @@
|
||||
<svg version="1.1" id="Layer_1" xmlns:x="ns_extend;" xmlns:i="ns_ai;" xmlns:graph="ns_graphs;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 49.64 47.36" style="enable-background:new 0 0 49.64 47.36;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#7856FF;}
|
||||
</style>
|
||||
<metadata>
|
||||
<sfw xmlns="ns_sfw;">
|
||||
<slices>
|
||||
</slices>
|
||||
<sliceSourceBounds bottomLeftOrigin="true" height="47.36" width="49.64" x="102.59" y="19.73">
|
||||
</sliceSourceBounds>
|
||||
</sfw>
|
||||
</metadata>
|
||||
<g>
|
||||
<path class="st0" d="M14.41,19.54h6.31c-1.58-0.99-2.17-2.37-2.96-4.93l-2.37-8.78c-1.08-3.95-1.97-5.82-6.31-5.82H0.01v2.37H1.3
|
||||
c2.66,0,2.96,0.99,3.75,3.95l2.07,7.7C8.2,17.77,9.89,19.54,14.41,19.54L14.41,19.54z M29.02,19.54h6.31c4.54,0,6.11-1.78,7.2-5.52
|
||||
l2.07-7.7c0.79-2.96,1.18-3.95,3.75-3.95h1.29V0h-8.98c-4.44,0-5.33,1.78-6.32,5.82l-2.37,8.78
|
||||
C31.19,17.26,30.59,18.55,29.02,19.54z M20.73,27.82h8.29v-8.29h-8.29V27.82z M0.01,47.36h9.07c4.34,0,5.23-1.88,6.31-5.82
|
||||
l2.37-8.78c0.79-2.56,1.38-3.95,2.96-4.93h-6.31c-4.54,0-6.22,1.78-7.3,5.52l-2.07,7.7C4.25,44.01,3.96,45,1.29,45H0L0.01,47.36
|
||||
L0.01,47.36z M40.65,47.36h8.98v-2.37h-1.29c-2.56,0-2.96-0.99-3.75-3.95l-2.07-7.7c-1.08-3.75-2.66-5.52-7.2-5.52h-6.3
|
||||
c1.58,0.99,2.15,2.27,2.94,4.93l2.37,8.78C35.32,45.58,36.21,47.36,40.65,47.36L40.65,47.36z">
|
||||
</path>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
7
apps/agent/assets/mcp-icons/monday.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg width="24" height="24" viewBox="0 -50 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
|
||||
<g>
|
||||
<path d="M31.8458633,153.488694 C20.3244423,153.513586 9.68073708,147.337265 3.98575204,137.321731 C-1.62714067,127.367831 -1.29055839,115.129325 4.86093879,105.498969 L62.2342919,15.4033556 C68.2125882,5.54538256 79.032489,-0.333585033 90.5563073,0.0146553508 C102.071737,0.290611552 112.546041,6.74705604 117.96667,16.9106216 C123.315033,27.0238906 122.646488,39.1914174 116.240607,48.6847625 L58.9037201,138.780375 C52.9943022,147.988884 42.7873202,153.537154 31.8458633,153.488694 L31.8458633,153.488694 Z" fill="#F62B54"></path>
|
||||
<path d="M130.25575,153.488484 C118.683837,153.488484 108.035731,147.301291 102.444261,137.358197 C96.8438154,127.431292 97.1804475,115.223704 103.319447,105.620522 L160.583402,15.7315506 C166.47539,5.73210989 177.327374,-0.284878136 188.929728,0.0146553508 C200.598885,0.269918151 211.174058,6.7973526 216.522421,17.0078646 C221.834319,27.2183766 221.056375,39.4588356 214.456008,48.9278699 L157.204209,138.816842 C151.313487,147.985468 141.153618,153.5168 130.25575,153.488484 Z" fill="#FFCC00"></path>
|
||||
<ellipse fill="#00CA72" cx="226.465527" cy="125.324379" rx="29.5375538" ry="28.9176274"></ellipse>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
apps/agent/assets/mcp-icons/onedrive.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 5.5 32 20.5"><title>OfficeCore10_32x_24x_20x_16x_01-22-2019</title><g id="STYLE_COLOR"><path d="M12.20245,11.19292l.00031-.0011,6.71765,4.02379,4.00293-1.68451.00018.00068A6.4768,6.4768,0,0,1,25.5,13c.14764,0,.29358.0067.43878.01639a10.00075,10.00075,0,0,0-18.041-3.01381C7.932,10.00215,7.9657,10,8,10A7.96073,7.96073,0,0,1,12.20245,11.19292Z" fill="#0364b8"/><path d="M12.20276,11.19182l-.00031.0011A7.96073,7.96073,0,0,0,8,10c-.0343,0-.06805.00215-.10223.00258A7.99676,7.99676,0,0,0,1.43732,22.57277l5.924-2.49292,2.63342-1.10819,5.86353-2.46746,3.06213-1.28859Z" fill="#0078d4"/><path d="M25.93878,13.01639C25.79358,13.0067,25.64764,13,25.5,13a6.4768,6.4768,0,0,0-2.57648.53178l-.00018-.00068-4.00293,1.68451,1.16077.69528L23.88611,18.19l1.66009.99438,5.67633,3.40007a6.5002,6.5002,0,0,0-5.28375-9.56805Z" fill="#1490df"/><path d="M25.5462,19.18437,23.88611,18.19l-3.80493-2.2791-1.16077-.69528L15.85828,16.5042,9.99475,18.97166,7.36133,20.07985l-5.924,2.49292A7.98889,7.98889,0,0,0,8,26H25.5a6.49837,6.49837,0,0,0,5.72253-3.41556Z" fill="#28a8ea"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
1
apps/agent/assets/mcp-icons/outlook.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="24px" height="24px"><path fill="#03A9F4" d="M21,31c0,1.104,0.896,2,2,2h17c1.104,0,2-0.896,2-2V16c0-1.104-0.896-2-2-2H23c-1.104,0-2,0.896-2,2V31z"/><path fill="#B3E5FC" d="M42,16.975V16c0-0.428-0.137-0.823-0.367-1.148l-11.264,6.932l-7.542-4.656L22.125,19l8.459,5L42,16.975z"/><path fill="#0277BD" d="M27 41.46L6 37.46 6 9.46 27 5.46z"/><path fill="#FFF" d="M21.216,18.311c-1.098-1.275-2.546-1.913-4.328-1.913c-1.892,0-3.408,0.669-4.554,2.003c-1.144,1.337-1.719,3.088-1.719,5.246c0,2.045,0.564,3.714,1.69,4.986c1.126,1.273,2.592,1.91,4.378,1.91c1.84,0,3.331-0.652,4.474-1.975c1.143-1.313,1.712-3.043,1.712-5.199C22.869,21.281,22.318,19.595,21.216,18.311z M19.049,26.735c-0.568,0.769-1.339,1.152-2.313,1.152c-0.939,0-1.699-0.394-2.285-1.187c-0.581-0.785-0.87-1.861-0.87-3.211c0-1.336,0.289-2.414,0.87-3.225c0.586-0.81,1.368-1.211,2.355-1.211c0.962,0,1.718,0.393,2.267,1.178c0.555,0.795,0.833,1.895,0.833,3.31C19.907,24.906,19.618,25.968,19.049,26.735z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
1
apps/agent/assets/mcp-icons/postman.svg
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
3
apps/agent/assets/mcp-icons/resend.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 600 600" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M186 447.471V154H318.062C336.788 154 353.697 158.053 368.79 166.158C384.163 174.263 396.181 185.443 404.845 199.698C413.51 213.672 417.842 229.604 417.842 247.491C417.842 265.938 413.51 282.568 404.845 297.381C396.181 311.915 384.302 323.375 369.209 331.759C354.117 340.144 337.067 344.337 318.062 344.337H253.917V447.471H186ZM348.667 447.471L274.041 314.99L346.99 304.509L430 447.471H348.667ZM253.917 289.835H311.773C319.04 289.835 325.329 288.298 330.639 285.223C336.229 281.869 340.421 277.258 343.216 271.388C346.291 265.519 347.828 258.811 347.828 251.265C347.828 243.718 346.151 237.15 342.797 231.56C339.443 225.691 334.552 221.219 328.124 218.144C321.975 215.07 314.428 213.533 305.484 213.533H253.917V289.835Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 849 B |
1
apps/agent/assets/mcp-icons/shopify.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><defs><style>.cls-1{fill:#8db948;}.cls-2{fill:#5c863e;}.cls-3{fill:#fff;}</style></defs><path class="cls-1" d="M480.51,233.35c4.11,0,6.16,2.05,10.26,4.11-24.62,10.25-49.23,36.92-61.54,94.35L384.1,344.12C398.46,303.1,427.18,233.35,480.51,233.35Zm22.57,20.52a143.05,143.05,0,0,1,8.2,49.23v4.1L451.8,323.61C464.1,280.53,484.62,262.07,503.08,253.87Zm53.33,36.92L529.74,299v-6.15c0-18.46-2-32.82-6.15-45.13C538,251.81,550.26,270.28,556.41,290.79Zm133.33,32.82a4.41,4.41,0,0,0-4.1-4.1c-4.1,0-47.18-4.11-47.18-4.11s-30.77-30.77-34.87-32.82c-4.1-4.1-10.26-2.05-12.31-2.05,0,0-6.15,2.05-16.41,6.16C564.61,258,546.15,231.3,515.38,231.3h-2a36.26,36.26,0,0,0-30.77-16.41c-73.84-2-108.71,90.26-121,137.44-16.41,4.1-32.82,10.25-51.28,16.41-16.41,4.1-16.41,6.15-18.46,20.51-2.05,10.26-43.08,334.35-43.08,334.35l326.15,61.54,176.41-39S689.74,327.71,689.74,323.61Z"/><path class="cls-2" d="M683.59,319.51c-2.05,0-45.13-4.11-45.13-4.11s-30.77-30.77-34.87-32.82c-2.05-2.05-2.05-2.05-4.1-2.05L574.87,785.14l176.41-39s-61.54-418.46-61.54-422.56c0-2.05-4.1-4.1-6.15-4.1"/><path class="cls-3" d="M515.38,418l-22.56,65.64a97.24,97.24,0,0,0-43.08-10.26c-34.87,0-36.92,20.51-36.92,26.67,0,28.71,77.95,41,77.95,110.76,0,55.39-34.87,90.26-82,90.26-55.39,0-84.1-34.87-84.1-34.87L339,616.94s28.71,24.61,53.33,24.61c16.41,0,22.56-12.3,22.56-22.56,0-39-63.59-41-63.59-104.61,0-53.34,39-104.62,114.87-104.62C501,407.71,515.38,418,515.38,418"/></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
5
apps/agent/assets/mcp-icons/stripe.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="24" height="24" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="512" cy="512" r="512" style="fill:#635bff"/>
|
||||
<path d="M781.67 515.75c0-38.35-18.58-68.62-54.08-68.62s-57.23 30.26-57.23 68.32c0 45.09 25.47 67.87 62 67.87 17.83 0 31.31-4 41.5-9.74v-30c-10.19 5.09-21.87 8.24-36.7 8.24-14.53 0-27.42-5.09-29.06-22.77h73.26c.01-1.92.31-9.71.31-13.3zm-74-14.23c0-16.93 10.34-24 19.78-24 9.14 0 18.88 7 18.88 24zm-95.14-54.39a42.32 42.32 0 0 0-29.36 11.69l-1.95-9.29h-33v174.68l37.45-7.94.15-42.4c5.39 3.9 13.33 9.44 26.52 9.44 26.82 0 51.24-21.57 51.24-69.06-.12-43.45-24.84-67.12-51.05-67.12zm-9 103.22c-8.84 0-14.08-3.15-17.68-7l-.15-55.58c3.9-4.34 9.29-7.34 17.83-7.34 13.63 0 23.07 15.28 23.07 34.91.01 20.03-9.28 35.01-23.06 35.01zM496.72 438.29l37.6-8.09v-30.41l-37.6 7.94v30.56zm0 11.39h37.6v131.09h-37.6zm-40.3 11.08L454 449.68h-32.34v131.08h37.45v-88.84c8.84-11.54 23.82-9.44 28.46-7.79v-34.45c-4.78-1.8-22.31-5.1-31.15 11.08zm-74.91-43.59L345 425l-.15 120c0 22.17 16.63 38.5 38.8 38.5 12.28 0 21.27-2.25 26.22-4.94v-30.45c-4.79 1.95-28.46 8.84-28.46-13.33v-53.19h28.46v-31.91h-28.51zm-101.27 70.56c0-5.84 4.79-8.09 12.73-8.09a83.56 83.56 0 0 1 37.15 9.59V454a98.8 98.8 0 0 0-37.12-6.87c-30.41 0-50.64 15.88-50.64 42.4 0 41.35 56.93 34.76 56.93 52.58 0 6.89-6 9.14-14.38 9.14-12.43 0-28.32-5.09-40.9-12v35.66a103.85 103.85 0 0 0 40.9 8.54c31.16 0 52.58-15.43 52.58-42.25-.17-44.63-57.25-36.69-57.25-53.47z" style="fill:#fff"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
15
apps/agent/assets/mcp-icons/supabase.svg
Normal file
@@ -0,0 +1,15 @@
|
||||
<svg width="24" height="24" viewBox="0 0 109 113" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint0_linear)"/>
|
||||
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint1_linear)" fill-opacity="0.2"/>
|
||||
<path d="M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z" fill="#3ECF8E"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear" x1="53.9738" y1="54.974" x2="94.1635" y2="71.8295" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#249361"/>
|
||||
<stop offset="1" stop-color="#3ECF8E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear" x1="36.1558" y1="30.578" x2="54.4844" y2="65.0806" gradientUnits="userSpaceOnUse">
|
||||
<stop/>
|
||||
<stop offset="1" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
3
apps/agent/assets/mcp-icons/vercel.svg
Normal file
@@ -0,0 +1,3 @@
|
||||
<svg width="1155" height="1000" viewBox="0 0 1155 1000" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M577.344 0L1154.69 1000H0L577.344 0Z" fill="black"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 173 B |
BIN
apps/agent/assets/mcp-icons/whatsapp.webp
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
1
apps/agent/assets/mcp-icons/wordpress.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 122.52 122.523" xmlns="http://www.w3.org/2000/svg"><g fill="#464342"><path d="m8.708 61.26c0 20.802 12.089 38.779 29.619 47.298l-25.069-68.686c-2.916 6.536-4.55 13.769-4.55 21.388z"/><path d="m96.74 58.608c0-6.495-2.333-10.993-4.334-14.494-2.664-4.329-5.161-7.995-5.161-12.324 0-4.831 3.664-9.328 8.825-9.328.233 0 .454.029.681.042-9.35-8.566-21.807-13.796-35.489-13.796-18.36 0-34.513 9.42-43.91 23.688 1.233.037 2.395.063 3.382.063 5.497 0 14.006-.667 14.006-.667 2.833-.167 3.167 3.994.337 4.329 0 0-2.847.335-6.015.501l19.138 56.925 11.501-34.493-8.188-22.434c-2.83-.166-5.511-.501-5.511-.501-2.832-.166-2.5-4.496.332-4.329 0 0 8.679.667 13.843.667 5.496 0 14.006-.667 14.006-.667 2.835-.167 3.168 3.994.337 4.329 0 0-2.853.335-6.015.501l18.992 56.494 5.242-17.517c2.272-7.269 4.001-12.49 4.001-16.989z"/><path d="m62.184 65.857-15.768 45.819c4.708 1.384 9.687 2.141 14.846 2.141 6.12 0 11.989-1.058 17.452-2.979-.141-.225-.269-.464-.374-.724z"/><path d="m107.376 36.046c.226 1.674.354 3.471.354 5.404 0 5.333-.996 11.328-3.996 18.824l-16.053 46.413c15.624-9.111 26.133-26.038 26.133-45.426.001-9.137-2.333-17.729-6.438-25.215z"/><path d="m61.262 0c-33.779 0-61.262 27.481-61.262 61.26 0 33.783 27.483 61.263 61.262 61.263 33.778 0 61.265-27.48 61.265-61.263-.001-33.779-27.487-61.26-61.265-61.26zm0 119.715c-32.23 0-58.453-26.223-58.453-58.455 0-32.23 26.222-58.451 58.453-58.451 32.229 0 58.45 26.221 58.45 58.451 0 32.232-26.221 58.455-58.45 58.455z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
25
apps/agent/assets/mcp-icons/youtube.svg
Normal file
@@ -0,0 +1,25 @@
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="svg2" xml:space="preserve" width="24" height="24" viewBox="0 0 234.66667 165.33333" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<metadata id="metadata8">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>
|
||||
image/svg+xml
|
||||
</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage">
|
||||
</dc:type>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs6">
|
||||
</defs>
|
||||
<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview4">
|
||||
</sodipodi:namedview>
|
||||
<g id="g10" inkscape:groupmode="layer" inkscape:label="ink_ext_XXXXXX" transform="matrix(1.3333333,0,0,-1.3333333,0,165.33333)">
|
||||
<g id="g12" transform="scale(0.1)">
|
||||
<path d="m 1723.22,1046.37 c -20.24,76.22 -79.87,136.24 -155.6,156.61 C 1430.37,1240 880,1240 880,1240 c 0,0 -550.367,0 -687.621,-37.02 C 116.656,1182.61 57.0156,1122.59 36.7773,1046.37 0,908.227 0,620 0,620 0,620 0,331.777 36.7773,193.621 57.0156,117.41 116.656,57.3906 192.379,37.0117 329.633,0 880,0 880,0 c 0,0 550.37,0 687.62,37.0117 75.73,20.3789 135.36,80.3983 155.6,156.6093 C 1760,331.777 1760,620 1760,620 c 0,0 0,288.227 -36.78,426.37" style="fill:#ed1d24;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path14">
|
||||
</path>
|
||||
<path d="m 700,358.313 460,261.675 -460,261.7 z" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path16">
|
||||
</path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
1
apps/agent/assets/mcp-icons/zendesk.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 1393 1055.77" xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M643.51 278.74v777H0zm0-278.74c0 177.57-143.84 321.41-321.41 321.41S0 177.57 0 0zm106 1055.77c0-177.57 143.84-321.41 321.41-321.41s321.41 143.84 321.41 321.41zm0-278.74V0H1393z" fill="#03363d"/></svg>
|
||||
|
After Width: | Height: | Size: 300 B |
@@ -51,7 +51,7 @@ export const ApiKeyDialog: FC<ApiKeyDialogProps> = ({
|
||||
},
|
||||
})
|
||||
|
||||
// biome-ignore lint/correctness/useExhaustiveDependencies: We only want to reset the form when the dialog is closed, not on every render
|
||||
// biome-ignore lint/correctness/useExhaustiveDependencies: reset form when dialog closes
|
||||
useEffect(() => {
|
||||
if (!open) form.reset()
|
||||
}, [open])
|
||||
|
||||
@@ -1,8 +1,17 @@
|
||||
import { Server } from 'lucide-react'
|
||||
import type { FC } from 'react'
|
||||
import AirtableSvg from '@/assets/mcp-icons/airtable.svg'
|
||||
import AsanaSvg from '@/assets/mcp-icons/asana.svg'
|
||||
import BoxSvg from '@/assets/mcp-icons/box.svg'
|
||||
import BraveSearchSvg from '@/assets/mcp-icons/brave_search.svg'
|
||||
import CalComSvg from '@/assets/mcp-icons/cal_com.svg'
|
||||
import CanvaSvg from '@/assets/mcp-icons/canva.svg'
|
||||
import ClickUpSvg from '@/assets/mcp-icons/clickup.svg'
|
||||
import CloudflareSvg from '@/assets/mcp-icons/cloudflare.svg'
|
||||
import ConfluenceSvg from '@/assets/mcp-icons/confluence.svg'
|
||||
import DiscordSvg from '@/assets/mcp-icons/discord.svg'
|
||||
import DropboxSvg from '@/assets/mcp-icons/dropbox.svg'
|
||||
import ExaPng from '@/assets/mcp-icons/exa.png'
|
||||
import FigmaSvg from '@/assets/mcp-icons/figma.svg'
|
||||
import GithubSvg from '@/assets/mcp-icons/github.svg'
|
||||
import GitlabSvg from '@/assets/mcp-icons/gitlab.svg'
|
||||
@@ -11,13 +20,32 @@ import GoogleSvg from '@/assets/mcp-icons/google.svg'
|
||||
import GoogleCalendarSvg from '@/assets/mcp-icons/google_calendar.svg'
|
||||
import GoogleDocsSvg from '@/assets/mcp-icons/google_docs_editors.svg'
|
||||
import GoogleDriveSvg from '@/assets/mcp-icons/google_drive.svg'
|
||||
import GoogleFormsSvg from '@/assets/mcp-icons/google_forms.svg'
|
||||
import HubSpotSvg from '@/assets/mcp-icons/hubspot.svg'
|
||||
import IntercomSvg from '@/assets/mcp-icons/intercom.svg'
|
||||
import JiraSvg from '@/assets/mcp-icons/jira.svg'
|
||||
import LinearSvg from '@/assets/mcp-icons/linear.svg'
|
||||
import LinkedinSvg from '@/assets/mcp-icons/linkedin.svg'
|
||||
import Mem0Webp from '@/assets/mcp-icons/memo.webp'
|
||||
import MicrosoftTeamsSvg from '@/assets/mcp-icons/microsoft_teams.svg'
|
||||
import MixpanelSvg from '@/assets/mcp-icons/mixpanel.svg'
|
||||
import MondaySvg from '@/assets/mcp-icons/monday.svg'
|
||||
import NotionSvg from '@/assets/mcp-icons/notion.svg'
|
||||
import OneDriveSvg from '@/assets/mcp-icons/onedrive.svg'
|
||||
import OutlookSvg from '@/assets/mcp-icons/outlook.svg'
|
||||
import PostHogSvg from '@/assets/mcp-icons/posthog.svg'
|
||||
import PostmanSvg from '@/assets/mcp-icons/postman.svg'
|
||||
import ResendSvg from '@/assets/mcp-icons/resend.svg'
|
||||
import SalesforceSvg from '@/assets/mcp-icons/salesforce.svg'
|
||||
import ShopifySvg from '@/assets/mcp-icons/shopify.svg'
|
||||
import SlackSvg from '@/assets/mcp-icons/slack.svg'
|
||||
import StripeSvg from '@/assets/mcp-icons/stripe.svg'
|
||||
import SupabaseSvg from '@/assets/mcp-icons/supabase.svg'
|
||||
import VercelSvg from '@/assets/mcp-icons/vercel.svg'
|
||||
import WhatsAppWebp from '@/assets/mcp-icons/whatsapp.webp'
|
||||
import WordPressSvg from '@/assets/mcp-icons/wordpress.svg'
|
||||
import YouTubeSvg from '@/assets/mcp-icons/youtube.svg'
|
||||
import ZendeskSvg from '@/assets/mcp-icons/zendesk.svg'
|
||||
|
||||
const mcpIconMap: Record<string, string> = {
|
||||
Gmail: GmailSvg,
|
||||
@@ -25,6 +53,7 @@ const mcpIconMap: Record<string, string> = {
|
||||
'Google Docs': GoogleDocsSvg,
|
||||
'Google Drive': GoogleDriveSvg,
|
||||
'Google Sheets': GoogleSvg,
|
||||
'Google Forms': GoogleFormsSvg,
|
||||
Slack: SlackSvg,
|
||||
LinkedIn: LinkedinSvg,
|
||||
Notion: NotionSvg,
|
||||
@@ -37,7 +66,35 @@ const mcpIconMap: Record<string, string> = {
|
||||
Figma: FigmaSvg,
|
||||
Canva: CanvaSvg,
|
||||
Salesforce: SalesforceSvg,
|
||||
ClickUp: ClickUpSvg,
|
||||
Asana: AsanaSvg,
|
||||
Monday: MondaySvg,
|
||||
'Microsoft Teams': MicrosoftTeamsSvg,
|
||||
'Outlook Mail': OutlookSvg,
|
||||
'Outlook Calendar': OutlookSvg,
|
||||
Supabase: SupabaseSvg,
|
||||
Vercel: VercelSvg,
|
||||
Postman: PostmanSvg,
|
||||
Stripe: StripeSvg,
|
||||
Cloudflare: CloudflareSvg,
|
||||
'Brave Search': BraveSearchSvg,
|
||||
Mem0: Mem0Webp,
|
||||
Exa: ExaPng,
|
||||
Dropbox: DropboxSvg,
|
||||
OneDrive: OneDriveSvg,
|
||||
WordPress: WordPressSvg,
|
||||
YouTube: YouTubeSvg,
|
||||
Box: BoxSvg,
|
||||
HubSpot: HubSpotSvg,
|
||||
PostHog: PostHogSvg,
|
||||
Mixpanel: MixpanelSvg,
|
||||
Discord: DiscordSvg,
|
||||
WhatsApp: WhatsAppWebp,
|
||||
Shopify: ShopifySvg,
|
||||
'Cal.com': CalComSvg,
|
||||
Resend: ResendSvg,
|
||||
Zendesk: ZendeskSvg,
|
||||
Intercom: IntercomSvg,
|
||||
}
|
||||
|
||||
interface McpServerIconProps {
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
* Copyright 2025 BrowserOS
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import { OAUTH_MCP_SERVERS } from '../lib/clients/klavis/oauth-mcp-servers'
|
||||
|
||||
/**
|
||||
* BrowserOS Agent System Prompt v5
|
||||
*
|
||||
@@ -251,10 +254,13 @@ Use \`browser_get_bookmarks\` to find existing folder IDs, or create new folders
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
function getExternalIntegrations(): string {
|
||||
const serverNames = OAUTH_MCP_SERVERS.map((s) => s.name).join(', ')
|
||||
const serverCount = OAUTH_MCP_SERVERS.length
|
||||
|
||||
return `<external_integrations>
|
||||
## External Integrations (Klavis Strata)
|
||||
|
||||
You have access to 15+ external services, including Gmail, Slack, Google Calendar, Notion, GitHub, and Jira, via Strata tools. Use progressive discovery.
|
||||
You have access to ${serverCount}+ external services (Gmail, Slack, Google Calendar, Notion, GitHub, Jira, etc.) via Strata tools. Use progressive discovery.
|
||||
|
||||
<discovery_flow>
|
||||
1. \`discover_server_categories_or_actions(user_query, server_names[])\` - **Start here**. Returns categories or actions for specified servers.
|
||||
@@ -281,7 +287,7 @@ When \`execute_action\` fails with an authentication error:
|
||||
</critical_rule>
|
||||
|
||||
## Available Servers
|
||||
Gmail, Google Calendar, Google Docs, Google Sheets, Google Drive, Slack, LinkedIn, Notion, Airtable, Confluence, GitHub, GitLab, Linear, Jira, Figma, Canva, Salesforce.
|
||||
${serverNames}.
|
||||
|
||||
## Usage Guidelines
|
||||
- Always discover before executing, do not guess action names
|
||||
|
||||
@@ -19,6 +19,29 @@ interface KlavisRouteDeps {
|
||||
browserosId: string
|
||||
}
|
||||
|
||||
const normalizeServerKey = (value: string): string =>
|
||||
value.toLowerCase().replace(/[^a-z0-9]+/g, '')
|
||||
|
||||
const getAuthUrlForServer = (
|
||||
authUrlMap: Record<string, string> | undefined,
|
||||
serverName: string,
|
||||
): string | undefined => {
|
||||
if (!authUrlMap) {
|
||||
return undefined
|
||||
}
|
||||
const directMatch = authUrlMap[serverName]
|
||||
if (directMatch) {
|
||||
return directMatch
|
||||
}
|
||||
const targetKey = normalizeServerKey(serverName)
|
||||
for (const [key, value] of Object.entries(authUrlMap)) {
|
||||
if (normalizeServerKey(key) === targetKey) {
|
||||
return value
|
||||
}
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
export function createKlavisRoutes(deps: KlavisRouteDeps) {
|
||||
const { browserosId } = deps
|
||||
const klavisClient = new KlavisClient()
|
||||
@@ -67,11 +90,18 @@ export function createKlavisRoutes(deps: KlavisRouteDeps) {
|
||||
|
||||
try {
|
||||
const integrations = await klavisClient.getUserIntegrations(browserosId)
|
||||
const normalizedIntegrations = integrations.map((integration) => ({
|
||||
name: integration.name,
|
||||
is_authenticated: integration.isAuthenticated,
|
||||
}))
|
||||
logger.info('Fetched user integrations', {
|
||||
browserosId: browserosId.slice(0, 12),
|
||||
count: integrations.length,
|
||||
count: normalizedIntegrations.length,
|
||||
})
|
||||
return c.json({
|
||||
integrations: normalizedIntegrations,
|
||||
count: normalizedIntegrations.length,
|
||||
})
|
||||
return c.json({ integrations, count: integrations.length })
|
||||
} catch (error) {
|
||||
logger.error('Error fetching user integrations', {
|
||||
browserosId: browserosId?.slice(0, 12),
|
||||
@@ -101,8 +131,8 @@ export function createKlavisRoutes(deps: KlavisRouteDeps) {
|
||||
serverName,
|
||||
strataId: result.strataId,
|
||||
addedServers: result.addedServers,
|
||||
oauthUrl: result.oauthUrls?.[serverName],
|
||||
apiKeyUrl: result.apiKeyUrls?.[serverName],
|
||||
oauthUrl: getAuthUrlForServer(result.oauthUrls, serverName),
|
||||
apiKeyUrl: getAuthUrlForServer(result.apiKeyUrls, serverName),
|
||||
})
|
||||
})
|
||||
.post(
|
||||
|
||||
@@ -15,6 +15,19 @@ export interface StrataCreateResponse {
|
||||
apiKeyUrls?: Record<string, string>
|
||||
}
|
||||
|
||||
interface KlavisIntegrationObject {
|
||||
name?: string
|
||||
isAuthenticated?: boolean
|
||||
is_authenticated?: boolean
|
||||
}
|
||||
|
||||
type KlavisIntegrationItem = string | KlavisIntegrationObject
|
||||
|
||||
export interface UserIntegration {
|
||||
name: string
|
||||
isAuthenticated: boolean
|
||||
}
|
||||
|
||||
export class KlavisClient {
|
||||
private baseUrl: string
|
||||
|
||||
@@ -81,19 +94,42 @@ export class KlavisClient {
|
||||
/**
|
||||
* Get user integrations with authentication status
|
||||
*/
|
||||
async getUserIntegrations(
|
||||
userId: string,
|
||||
): Promise<Array<{ name: string; isAuthenticated: boolean }>> {
|
||||
async getUserIntegrations(userId: string): Promise<UserIntegration[]> {
|
||||
const data = await this.request<{
|
||||
integrations: Array<{ name: string; isAuthenticated: boolean }>
|
||||
integrations?: KlavisIntegrationItem[]
|
||||
}>('GET', `/user/${userId}/integrations`)
|
||||
return data.integrations || []
|
||||
const integrations = Array.isArray(data.integrations)
|
||||
? data.integrations
|
||||
: []
|
||||
return integrations
|
||||
.map((integration) => this.normalizeIntegration(integration))
|
||||
.filter((integration): integration is UserIntegration =>
|
||||
Boolean(integration),
|
||||
)
|
||||
}
|
||||
|
||||
private normalizeIntegration(
|
||||
integration: KlavisIntegrationItem,
|
||||
): UserIntegration | null {
|
||||
if (typeof integration === 'string') {
|
||||
return { name: integration, isAuthenticated: true }
|
||||
}
|
||||
const name = integration.name
|
||||
if (!name || typeof name !== 'string') {
|
||||
return null
|
||||
}
|
||||
const isAuthenticated =
|
||||
typeof integration.isAuthenticated === 'boolean'
|
||||
? integration.isAuthenticated
|
||||
: typeof integration.is_authenticated === 'boolean'
|
||||
? integration.is_authenticated
|
||||
: false
|
||||
return { name, isAuthenticated }
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit an API key to Klavis's set-auth endpoint via the proxy.
|
||||
* Extracts instanceId from the apiKeyUrl and routes through the proxy.
|
||||
* Docs: POST /mcp-server/instance/set-auth with { instanceId, authData }
|
||||
*/
|
||||
async submitApiKey(apiKeyUrl: string, apiKey: string): Promise<void> {
|
||||
const parsedUrl = new URL(apiKeyUrl)
|
||||
@@ -102,15 +138,11 @@ export class KlavisClient {
|
||||
throw new Error('Missing instance_id in apiKeyUrl')
|
||||
}
|
||||
|
||||
const data = await this.request<{ success: boolean; message?: string }>(
|
||||
'POST',
|
||||
'/mcp-server/instance/set-auth',
|
||||
{ instanceId, authData: { api_key: apiKey } },
|
||||
)
|
||||
|
||||
if (!data.success) {
|
||||
throw new Error(data.message || 'Klavis API key submission failed')
|
||||
}
|
||||
// request() already throws on non-2xx responses
|
||||
await this.request('POST', '/mcp-server/instance/set-auth', {
|
||||
instanceId,
|
||||
authData: { api_key: apiKey },
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -30,5 +30,34 @@ export const OAUTH_MCP_SERVERS: OAuthMcpServer[] = [
|
||||
{ name: 'Figma', description: 'Access and manage design files' },
|
||||
{ name: 'Canva', description: 'Create and manage designs' },
|
||||
{ name: 'Salesforce', description: 'Manage leads, contacts, opportunities' },
|
||||
{ name: 'ClickUp', description: 'Manage tasks, projects, and workflows' },
|
||||
{ name: 'Asana', description: 'Organize and track team projects' },
|
||||
{ name: 'Monday', description: 'Manage work and team collaboration' },
|
||||
{ name: 'Microsoft Teams', description: 'Chat, meet, and collaborate' },
|
||||
{ name: 'Outlook Mail', description: 'Send, read, and manage emails' },
|
||||
{ name: 'Outlook Calendar', description: 'Schedule meetings and events' },
|
||||
{ name: 'Supabase', description: 'Manage databases and backend services' },
|
||||
{ name: 'Vercel', description: 'Deploy and manage web applications' },
|
||||
{ name: 'Postman', description: 'Test and manage APIs' },
|
||||
{ name: 'Stripe', description: 'Manage payments and subscriptions' },
|
||||
{ name: 'Cloudflare', description: 'Manage domains, DNS, and security' },
|
||||
{ name: 'Brave Search', description: 'Search the web privately' },
|
||||
{ name: 'Mem0', description: 'Store and retrieve AI memory' },
|
||||
{ name: 'Exa', description: 'AI-powered semantic web search' },
|
||||
{ name: 'Dropbox', description: 'Store and share files in the cloud' },
|
||||
{ name: 'OneDrive', description: 'Store and sync files with Microsoft' },
|
||||
{ name: 'WordPress', description: 'Manage websites and blog content' },
|
||||
{ name: 'YouTube', description: 'Access video info and transcripts' },
|
||||
{ name: 'Box', description: 'Manage and share enterprise files' },
|
||||
{ name: 'HubSpot', description: 'Manage contacts, deals, and marketing' },
|
||||
{ name: 'PostHog', description: 'Query analytics, manage feature flags' },
|
||||
{ name: 'Mixpanel', description: 'Analyze user behavior and metrics' },
|
||||
{ name: 'Discord', description: 'Send messages and manage servers' },
|
||||
{ name: 'WhatsApp', description: 'Send messages and manage conversations' },
|
||||
{ name: 'Shopify', description: 'Manage products, orders, and store' },
|
||||
{ name: 'Cal.com', description: 'Schedule meetings and manage availability' },
|
||||
{ name: 'Resend', description: 'Send transactional and marketing emails' },
|
||||
{ name: 'Google Forms', description: 'Create and manage forms and surveys' },
|
||||
{ name: 'Zendesk', description: 'Manage support tickets and customers' },
|
||||
{ name: 'Intercom', description: 'Manage customer messaging and support' },
|
||||
]
|
||||
|
||||
92
apps/server/tests/api/routes/klavis.test.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2025 BrowserOS
|
||||
*/
|
||||
|
||||
import { afterEach, describe, it } from 'bun:test'
|
||||
import assert from 'node:assert'
|
||||
import { createKlavisRoutes } from '../../../src/api/routes/klavis'
|
||||
|
||||
const originalFetch = globalThis.fetch
|
||||
|
||||
afterEach(() => {
|
||||
globalThis.fetch = originalFetch
|
||||
})
|
||||
|
||||
describe('createKlavisRoutes', () => {
|
||||
it('normalizes string integrations into authenticated entries', async () => {
|
||||
globalThis.fetch = (async () =>
|
||||
Response.json({
|
||||
integrations: ['Google Docs', 'Slack'],
|
||||
})) as typeof fetch
|
||||
|
||||
const route = createKlavisRoutes({ browserosId: 'user-123' })
|
||||
const response = await route.request('/user-integrations')
|
||||
const body = await response.json()
|
||||
|
||||
assert.strictEqual(response.status, 200)
|
||||
assert.deepStrictEqual(body, {
|
||||
integrations: [
|
||||
{ name: 'Google Docs', is_authenticated: true },
|
||||
{ name: 'Slack', is_authenticated: true },
|
||||
],
|
||||
count: 2,
|
||||
})
|
||||
})
|
||||
|
||||
it('supports object integrations with mixed auth flag formats', async () => {
|
||||
globalThis.fetch = (async () =>
|
||||
Response.json({
|
||||
integrations: [
|
||||
{ name: 'Google Docs', isAuthenticated: false },
|
||||
{ name: 'Slack', is_authenticated: true },
|
||||
],
|
||||
})) as typeof fetch
|
||||
|
||||
const route = createKlavisRoutes({ browserosId: 'user-123' })
|
||||
const response = await route.request('/user-integrations')
|
||||
const body = await response.json()
|
||||
|
||||
assert.strictEqual(response.status, 200)
|
||||
assert.deepStrictEqual(body, {
|
||||
integrations: [
|
||||
{ name: 'Google Docs', is_authenticated: false },
|
||||
{ name: 'Slack', is_authenticated: true },
|
||||
],
|
||||
count: 2,
|
||||
})
|
||||
})
|
||||
|
||||
it('resolves auth URLs with normalized server name keys', async () => {
|
||||
globalThis.fetch = (async () =>
|
||||
Response.json({
|
||||
strataServerUrl: 'https://strata.example.com',
|
||||
strataId: 'strata-123',
|
||||
addedServers: ['Google Docs'],
|
||||
oauthUrls: { google_docs: 'https://oauth.example.com/google-docs' },
|
||||
apiKeyUrls: {
|
||||
google_docs: 'https://auth.example.com/setup?instance_id=abc123',
|
||||
},
|
||||
})) as typeof fetch
|
||||
|
||||
const route = createKlavisRoutes({ browserosId: 'user-123' })
|
||||
const response = await route.request('/servers/add', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({ serverName: 'Google Docs' }),
|
||||
})
|
||||
const body = await response.json()
|
||||
|
||||
assert.strictEqual(response.status, 200)
|
||||
assert.deepStrictEqual(body, {
|
||||
success: true,
|
||||
serverName: 'Google Docs',
|
||||
strataId: 'strata-123',
|
||||
addedServers: ['Google Docs'],
|
||||
oauthUrl: 'https://oauth.example.com/google-docs',
|
||||
apiKeyUrl: 'https://auth.example.com/setup?instance_id=abc123',
|
||||
})
|
||||
})
|
||||
})
|
||||